@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.
Files changed (113) hide show
  1. package/dist/cjs/codegenv1/embed.d.ts +2 -2
  2. package/dist/cjs/codegenv1/embed.js +25 -25
  3. package/dist/cjs/codegenv1/enum.js +2 -4
  4. package/dist/cjs/codegenv1/restore-json-names.d.ts +3 -0
  5. package/dist/cjs/codegenv1/restore-json-names.js +3 -0
  6. package/dist/cjs/codegenv1/symbols.d.ts +9 -0
  7. package/dist/cjs/codegenv1/symbols.js +9 -0
  8. package/dist/cjs/codegenv1/types.d.ts +55 -2
  9. package/dist/cjs/create.js +7 -18
  10. package/dist/cjs/desc-types.d.ts +27 -10
  11. package/dist/cjs/extensions.d.ts +21 -1
  12. package/dist/cjs/extensions.js +38 -7
  13. package/dist/cjs/fields.d.ts +17 -16
  14. package/dist/cjs/fields.js +17 -10
  15. package/dist/cjs/from-binary.js +9 -19
  16. package/dist/cjs/from-json.js +9 -13
  17. package/dist/cjs/index.d.ts +1 -1
  18. package/dist/cjs/index.js +3 -1
  19. package/dist/cjs/reflect/names.d.ts +0 -12
  20. package/dist/cjs/reflect/names.js +1 -39
  21. package/dist/cjs/reflect/nested-types.d.ts +11 -1
  22. package/dist/cjs/reflect/nested-types.js +34 -1
  23. package/dist/cjs/reflect/reflect-types.d.ts +158 -10
  24. package/dist/cjs/reflect/reflect.d.ts +11 -2
  25. package/dist/cjs/reflect/reflect.js +306 -281
  26. package/dist/cjs/reflect/registry.js +50 -41
  27. package/dist/cjs/reflect/unsafe.js +38 -43
  28. package/dist/cjs/to-binary.js +1 -3
  29. package/dist/cjs/to-json.js +7 -27
  30. package/dist/cjs/wire/base64-encoding.js +2 -2
  31. package/dist/cjs/wire/binary-encoding.d.ts +5 -3
  32. package/dist/cjs/wire/binary-encoding.js +16 -10
  33. package/dist/cjs/wkt/gen/google/protobuf/any_pb.d.ts +7 -0
  34. package/dist/cjs/wkt/gen/google/protobuf/any_pb.js +7 -2
  35. package/dist/cjs/wkt/gen/google/protobuf/api_pb.d.ts +15 -0
  36. package/dist/cjs/wkt/gen/google/protobuf/api_pb.js +15 -6
  37. package/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +22 -0
  38. package/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.js +22 -9
  39. package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +186 -0
  40. package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.js +186 -83
  41. package/dist/cjs/wkt/gen/google/protobuf/duration_pb.d.ts +7 -0
  42. package/dist/cjs/wkt/gen/google/protobuf/duration_pb.js +7 -2
  43. package/dist/cjs/wkt/gen/google/protobuf/empty_pb.d.ts +7 -0
  44. package/dist/cjs/wkt/gen/google/protobuf/empty_pb.js +7 -2
  45. package/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.d.ts +7 -0
  46. package/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.js +7 -2
  47. package/dist/cjs/wkt/gen/google/protobuf/source_context_pb.d.ts +7 -0
  48. package/dist/cjs/wkt/gen/google/protobuf/source_context_pb.js +7 -2
  49. package/dist/cjs/wkt/gen/google/protobuf/struct_pb.d.ts +18 -0
  50. package/dist/cjs/wkt/gen/google/protobuf/struct_pb.js +18 -7
  51. package/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.d.ts +7 -0
  52. package/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.js +7 -2
  53. package/dist/cjs/wkt/gen/google/protobuf/type_pb.d.ts +32 -0
  54. package/dist/cjs/wkt/gen/google/protobuf/type_pb.js +32 -13
  55. package/dist/cjs/wkt/gen/google/protobuf/wrappers_pb.d.ts +39 -0
  56. package/dist/cjs/wkt/gen/google/protobuf/wrappers_pb.js +39 -18
  57. package/dist/esm/codegenv1/embed.d.ts +2 -2
  58. package/dist/esm/codegenv1/embed.js +25 -25
  59. package/dist/esm/codegenv1/enum.js +2 -4
  60. package/dist/esm/codegenv1/restore-json-names.d.ts +3 -0
  61. package/dist/esm/codegenv1/restore-json-names.js +3 -0
  62. package/dist/esm/codegenv1/symbols.d.ts +9 -0
  63. package/dist/esm/codegenv1/symbols.js +9 -0
  64. package/dist/esm/codegenv1/types.d.ts +55 -2
  65. package/dist/esm/create.js +7 -18
  66. package/dist/esm/desc-types.d.ts +27 -10
  67. package/dist/esm/extensions.d.ts +21 -1
  68. package/dist/esm/extensions.js +35 -6
  69. package/dist/esm/fields.d.ts +17 -16
  70. package/dist/esm/fields.js +17 -10
  71. package/dist/esm/from-binary.js +9 -19
  72. package/dist/esm/from-json.js +11 -15
  73. package/dist/esm/index.d.ts +1 -1
  74. package/dist/esm/index.js +1 -1
  75. package/dist/esm/reflect/names.d.ts +0 -12
  76. package/dist/esm/reflect/names.js +0 -37
  77. package/dist/esm/reflect/nested-types.d.ts +11 -1
  78. package/dist/esm/reflect/nested-types.js +32 -0
  79. package/dist/esm/reflect/reflect-types.d.ts +158 -10
  80. package/dist/esm/reflect/reflect.d.ts +11 -2
  81. package/dist/esm/reflect/reflect.js +304 -279
  82. package/dist/esm/reflect/registry.js +50 -41
  83. package/dist/esm/reflect/unsafe.js +38 -43
  84. package/dist/esm/to-binary.js +1 -3
  85. package/dist/esm/to-json.js +7 -27
  86. package/dist/esm/wire/base64-encoding.js +2 -2
  87. package/dist/esm/wire/binary-encoding.d.ts +5 -3
  88. package/dist/esm/wire/binary-encoding.js +16 -10
  89. package/dist/esm/wkt/gen/google/protobuf/any_pb.d.ts +7 -0
  90. package/dist/esm/wkt/gen/google/protobuf/any_pb.js +7 -2
  91. package/dist/esm/wkt/gen/google/protobuf/api_pb.d.ts +15 -0
  92. package/dist/esm/wkt/gen/google/protobuf/api_pb.js +15 -6
  93. package/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +22 -0
  94. package/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.js +22 -9
  95. package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +186 -0
  96. package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +186 -83
  97. package/dist/esm/wkt/gen/google/protobuf/duration_pb.d.ts +7 -0
  98. package/dist/esm/wkt/gen/google/protobuf/duration_pb.js +7 -2
  99. package/dist/esm/wkt/gen/google/protobuf/empty_pb.d.ts +7 -0
  100. package/dist/esm/wkt/gen/google/protobuf/empty_pb.js +7 -2
  101. package/dist/esm/wkt/gen/google/protobuf/field_mask_pb.d.ts +7 -0
  102. package/dist/esm/wkt/gen/google/protobuf/field_mask_pb.js +7 -2
  103. package/dist/esm/wkt/gen/google/protobuf/source_context_pb.d.ts +7 -0
  104. package/dist/esm/wkt/gen/google/protobuf/source_context_pb.js +7 -2
  105. package/dist/esm/wkt/gen/google/protobuf/struct_pb.d.ts +18 -0
  106. package/dist/esm/wkt/gen/google/protobuf/struct_pb.js +18 -7
  107. package/dist/esm/wkt/gen/google/protobuf/timestamp_pb.d.ts +7 -0
  108. package/dist/esm/wkt/gen/google/protobuf/timestamp_pb.js +7 -2
  109. package/dist/esm/wkt/gen/google/protobuf/type_pb.d.ts +32 -0
  110. package/dist/esm/wkt/gen/google/protobuf/type_pb.js +32 -13
  111. package/dist/esm/wkt/gen/google/protobuf/wrappers_pb.d.ts +39 -0
  112. package/dist/esm/wkt/gen/google/protobuf/wrappers_pb.js +39 -18
  113. 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 !== null && message !== void 0 ? message : (message = create(messageDesc));
26
- const check = (opt === null || opt === void 0 ? void 0 : opt.disableFieldValueCheck) !== true;
27
- let fieldsByNumber;
28
- let sortedFields;
29
- return {
30
- message,
31
- [unsafeLocal]: message,
32
- desc: messageDesc,
33
- fields: messageDesc.fields,
34
- oneofs: messageDesc.oneofs,
35
- members: messageDesc.members,
36
- get sortedFields() {
37
- return (sortedFields !== null && sortedFields !== void 0 ? sortedFields : (sortedFields = messageDesc.fields
38
- .concat()
39
- .sort((a, b) => a.number - b.number)));
40
- },
41
- findNumber(number) {
42
- if (!fieldsByNumber) {
43
- fieldsByNumber = new Map(messageDesc.fields.map((f) => [f.number, f]));
44
- }
45
- return fieldsByNumber.get(number);
46
- },
47
- oneofCase(oneof) {
48
- assertOwn(message, oneof);
49
- return unsafeOneofCase(message, oneof);
50
- },
51
- isSet(field) {
52
- assertOwn(message, field);
53
- return unsafeIsSet(message, field);
54
- },
55
- clear(field) {
56
- assertOwn(message, field);
57
- unsafeClear(message, field);
58
- },
59
- get(field) {
60
- assertOwn(message, field);
61
- let value = unsafeGet(message, field);
62
- switch (field.fieldKind) {
63
- case "list":
64
- return reflectList(field, value);
65
- case "map":
66
- // TODO fix types
67
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
68
- return reflectMap(field, value); // eslint-disable-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-return
69
- case "message":
70
- if (value !== undefined &&
71
- !field.oneof &&
72
- isWrapperDesc(field.message)) {
73
- value = {
74
- $typeName: field.message.typeName,
75
- value: longToReflect(field.message.fields[0], value),
76
- };
77
- }
78
- return reflect(field.message, value);
79
- case "scalar":
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
- let local = value;
94
- if (isReflectMap(value) || isReflectList(value)) {
95
- local = value[unsafeLocal];
96
- }
97
- else if (isReflectMessage(value)) {
98
- const msg = value.message;
99
- local = !field.oneof && isWrapper(msg) ? msg.value : msg;
100
- }
101
- else {
102
- local = longToLocal(field, value);
103
- }
104
- unsafeSet(message, field, local);
105
- return undefined;
106
- },
107
- addListItem(field, value) {
108
- assertOwn(message, field);
109
- assertKind(field, "list");
110
- if (check) {
111
- if (checkListItem(field, 0, value)) {
112
- const arr = unsafeGet(message, field);
113
- return checkListItem(field, arr.length, value);
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
- unsafeAddListItem(message, field, listItemToLocal(field, value));
117
- return undefined;
118
- },
119
- setMapEntry(field, key, value) {
120
- assertOwn(message, field);
121
- assertKind(field, "map");
122
- if (check) {
123
- const err = checkMapEntry(field, key, value);
124
- if (err) {
125
- return err;
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
- unsafeSetMapEntry(message, field, mapKeyToLocal(key), mapValueToLocal(field, value));
129
- return undefined;
130
- },
131
- getUnknown() {
132
- return message.$unknown;
133
- },
134
- setUnknown(value) {
135
- message.$unknown = value;
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
- export function reflectList(field, unsafeInput) {
150
- const arr = unsafeInput !== null && unsafeInput !== void 0 ? unsafeInput : [];
151
- return {
152
- [unsafeLocal]: arr,
153
- field() {
154
- return field;
155
- },
156
- get size() {
157
- return arr.length;
158
- },
159
- get(index) {
160
- const item = arr[index];
161
- return item === undefined
162
- ? undefined
163
- : listItemToReflect(field, item);
164
- },
165
- set(index, item) {
166
- if (index < 0 || index >= arr.length) {
167
- return new FieldError(field, `list item #${index + 1}: out of range`);
168
- }
169
- const err = checkListItem(field, index, item);
170
- if (!err) {
171
- arr[index] = listItemToLocal(field, item);
172
- }
173
- return err;
174
- },
175
- add(...items) {
176
- let err;
177
- for (let i = 0; i < items.length && !err; i++) {
178
- err = checkListItem(field, arr.length + i, items[i]);
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
- if (!err) {
181
- for (const item of items) {
182
- arr.push(listItemToLocal(field, item));
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
- return err;
186
- },
187
- clear() {
188
- arr.splice(0, arr.length);
189
- },
190
- [Symbol.iterator]() {
191
- return this.values();
192
- },
193
- keys() {
194
- return arr.keys();
195
- },
196
- *values() {
197
- for (const item of arr) {
198
- yield listItemToReflect(field, item);
199
- }
200
- },
201
- *entries() {
202
- for (let i = 0; i < arr.length; i++) {
203
- yield [i, listItemToReflect(field, arr[i])];
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
- export function reflectMap(field, unsafeInput) {
209
- const obj = unsafeInput !== null && unsafeInput !== void 0 ? unsafeInput : {};
210
- return {
211
- [unsafeLocal]: obj,
212
- field() {
213
- return field;
214
- },
215
- set(key, value) {
216
- const err = checkMapEntry(field, key, value);
217
- if (!err) {
218
- obj[mapKeyToLocal(key)] = mapValueToLocal(field, value);
219
- }
220
- return err;
221
- },
222
- delete(key) {
223
- const k = mapKeyToLocal(key);
224
- const has = Object.prototype.hasOwnProperty.call(obj, k);
225
- if (has) {
226
- delete obj[k];
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 reflect(field.message, value);
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 reflect(field.message, value);
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
- if (field.scalar !== undefined) {
354
- // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check
355
- switch (field.scalar) {
356
- case ScalarType.INT64:
357
- case ScalarType.SFIXED64:
358
- case ScalarType.SINT64:
359
- if ("longType" in field &&
360
- field.longType == LongType.STRING &&
361
- typeof value == "string") {
362
- value = protoInt64.parse(value);
363
- }
364
- break;
365
- case ScalarType.FIXED64:
366
- case ScalarType.UINT64:
367
- if ("longType" in field &&
368
- field.longType == LongType.STRING &&
369
- typeof value == "string") {
370
- value = protoInt64.uParse(value);
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
- if (field.scalar !== undefined) {
379
- // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check
380
- switch (field.scalar) {
381
- case ScalarType.INT64:
382
- case ScalarType.SFIXED64:
383
- case ScalarType.SINT64:
384
- if ("longType" in field && field.longType == LongType.STRING) {
385
- value = String(value);
386
- }
387
- else if (typeof value == "string" || typeof value == "number") {
388
- value = protoInt64.parse(value);
389
- }
390
- break;
391
- case ScalarType.FIXED64:
392
- case ScalarType.UINT64:
393
- if ("longType" in field && field.longType == LongType.STRING) {
394
- value = String(value);
395
- }
396
- else if (typeof value == "string" || typeof value == "number") {
397
- value = protoInt64.uParse(value);
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
  }