ts-proto 1.159.2 → 1.160.0

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 (2) hide show
  1. package/build/main.js +54 -3
  2. package/package.json +1 -1
package/build/main.js CHANGED
@@ -943,7 +943,24 @@ function getEncodeWriteSnippet(ctx, field) {
943
943
  }
944
944
  else if ((0, types_1.isLong)(field) && options.forceLong === options_1.LongOption.BIGINT) {
945
945
  const tag = ((field.number << 3) | (0, types_1.basicWireType)(field.type)) >>> 0;
946
- return (place) => (0, ts_poet_1.code) `writer.uint32(${tag}).${(0, types_1.toReaderCall)(field)}(${place}.toString())`;
946
+ const fieldType = (0, types_1.toReaderCall)(field);
947
+ switch (fieldType) {
948
+ case "int64":
949
+ case "sint64":
950
+ case "sfixed64":
951
+ return (place) => (0, ts_poet_1.code) `if (BigInt.asIntN(64, ${place}) !== ${place}) {
952
+ throw new Error('value provided for field ${place} of type ${fieldType} too large');
953
+ }
954
+ writer.uint32(${tag}).${(0, types_1.toReaderCall)(field)}(${place}.toString())`;
955
+ case "uint64":
956
+ case "fixed64":
957
+ return (place) => (0, ts_poet_1.code) `if (BigInt.asUintN(64, ${place}) !== ${place}) {
958
+ throw new Error('value provided for field ${place} of type ${fieldType} too large');
959
+ }
960
+ writer.uint32(${tag}).${(0, types_1.toReaderCall)(field)}(${place}.toString())`;
961
+ default:
962
+ throw new Error(`unexpected BigInt type: ${fieldType}`);
963
+ }
947
964
  }
948
965
  else if ((0, types_1.isScalar)(field) || (0, types_1.isEnum)(field)) {
949
966
  const tag = ((field.number << 3) | (0, types_1.basicWireType)(field.type)) >>> 0;
@@ -1080,13 +1097,47 @@ function generateEncode(ctx, fullName, messageDesc) {
1080
1097
  // Ideally we'd reuse `writeSnippet` but it has tagging embedded inside of it.
1081
1098
  const tag = ((field.number << 3) | 2) >>> 0;
1082
1099
  const rhs = (x) => ((0, types_1.isLong)(field) && options.forceLong === options_1.LongOption.BIGINT ? `${x}.toString()` : x);
1083
- const listWriteSnippet = (0, ts_poet_1.code) `
1100
+ let listWriteSnippet = (0, ts_poet_1.code) `
1084
1101
  writer.uint32(${tag}).fork();
1085
1102
  for (const v of message.${fieldName}) {
1086
1103
  writer.${(0, types_1.toReaderCall)(field)}(${rhs("v")});
1087
1104
  }
1088
1105
  writer.ldelim();
1089
1106
  `;
1107
+ if ((0, types_1.isLong)(field) && options.forceLong === options_1.LongOption.BIGINT) {
1108
+ const fieldType = (0, types_1.toReaderCall)(field);
1109
+ switch (fieldType) {
1110
+ case "int64":
1111
+ case "sint64":
1112
+ case "sfixed64":
1113
+ listWriteSnippet = (0, ts_poet_1.code) `
1114
+ writer.uint32(${tag}).fork();
1115
+ for (const v of message.${fieldName}) {
1116
+ if (BigInt.asIntN(64, v) !== v) {
1117
+ throw new Error('a value provided in array field ${fieldName} of type ${fieldType} is too large');
1118
+ }
1119
+ writer.${(0, types_1.toReaderCall)(field)}(${rhs("v")});
1120
+ }
1121
+ writer.ldelim();
1122
+ `;
1123
+ break;
1124
+ case "uint64":
1125
+ case "fixed64":
1126
+ listWriteSnippet = (0, ts_poet_1.code) `
1127
+ writer.uint32(${tag}).fork();
1128
+ for (const v of message.${fieldName}) {
1129
+ if (BigInt.asUintN(64, v) !== v) {
1130
+ throw new Error('a value provided in array field ${fieldName} of type ${fieldType} is too large');
1131
+ }
1132
+ writer.${(0, types_1.toReaderCall)(field)}(${rhs("v")});
1133
+ }
1134
+ writer.ldelim();
1135
+ `;
1136
+ break;
1137
+ default:
1138
+ throw new Error(`unexpected BigInt type: ${fieldType}`);
1139
+ }
1140
+ }
1090
1141
  if (isOptional) {
1091
1142
  chunks.push((0, ts_poet_1.code) `
1092
1143
  if (message.${fieldName} !== undefined && message.${fieldName}.length !== 0) {
@@ -1669,7 +1720,7 @@ function generateToJson(ctx, fullName, fullProtobufTypeName, messageDesc) {
1669
1720
  return (0, ts_poet_1.code) `${from}`;
1670
1721
  }
1671
1722
  else if ((0, types_1.isTimestamp)(field) && options.useDate === options_1.DateOption.TIMESTAMP) {
1672
- return (0, ts_poet_1.code) `${utils.fromTimestamp}(${from}).toISOString()`;
1723
+ return (0, ts_poet_1.code) `${from}`;
1673
1724
  }
1674
1725
  else if ((0, types_1.isMapType)(ctx, messageDesc, field)) {
1675
1726
  // For map types, drill-in and then admittedly re-hard-code our per-value-type logic
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-proto",
3
- "version": "1.159.2",
3
+ "version": "1.160.0",
4
4
  "description": "",
5
5
  "main": "build/plugin.js",
6
6
  "repository": "github:stephenh/ts-proto",