@bufbuild/protobuf 2.0.0-alpha.1 → 2.0.0-alpha.3

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