ts-proto 1.162.0 → 1.162.1

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/build/main.js CHANGED
@@ -615,10 +615,10 @@ function generateInterfaceDeclaration(ctx, fullName, messageDesc, sourceInfo, fu
615
615
  }
616
616
  const info = sourceInfo.lookup(sourceInfo_1.Fields.message.field, index);
617
617
  (0, utils_1.maybeAddComment)(info, chunks, (_a = fieldDesc.options) === null || _a === void 0 ? void 0 : _a.deprecated);
618
- const { validatedPropertyName } = (0, utils_1.propertyNameComposition)(fieldDesc, options);
618
+ const fieldKey = (0, utils_1.safeAccessor)((0, utils_1.getFieldName)(fieldDesc, options));
619
619
  const isOptional = (0, types_1.isOptionalProperty)(fieldDesc, messageDesc.options, options);
620
620
  const type = (0, types_1.toTypeName)(ctx, messageDesc, fieldDesc, isOptional);
621
- chunks.push((0, ts_poet_1.code) `${maybeReadonly(options)}${validatedPropertyName}${isOptional ? "?" : ""}: ${type}, `);
621
+ chunks.push((0, ts_poet_1.code) `${maybeReadonly(options)}${fieldKey}${isOptional ? "?" : ""}: ${type}, `);
622
622
  });
623
623
  if (ctx.options.unknownFields) {
624
624
  chunks.push((0, ts_poet_1.code) `_unknownFields?: {[key: number]: Uint8Array[]} | undefined,`);
@@ -670,16 +670,16 @@ function generateBaseInstanceFactory(ctx, fullName, messageDesc, fullTypeName) {
670
670
  if (!processedOneofs.has(oneofIndex)) {
671
671
  processedOneofs.add(oneofIndex);
672
672
  const name = options.useJsonName
673
- ? (0, utils_1.propertyNameComposition)(field, options).validatedPropertyName
673
+ ? (0, utils_1.getFieldName)(field, options)
674
674
  : (0, case_1.maybeSnakeToCamel)(messageDesc.oneofDecl[oneofIndex].name, ctx.options);
675
- fields.push((0, ts_poet_1.code) `${name}: undefined`);
675
+ fields.push((0, ts_poet_1.code) `${(0, utils_1.safeAccessor)(name)}: undefined`);
676
676
  }
677
677
  continue;
678
678
  }
679
679
  if (!options.initializeFieldsAsUndefined && (0, types_1.isOptionalProperty)(field, messageDesc.options, options)) {
680
680
  continue;
681
681
  }
682
- const { validatedPropertyName } = (0, utils_1.propertyNameComposition)(field, options);
682
+ const fieldKey = (0, utils_1.safeAccessor)((0, utils_1.getFieldName)(field, options));
683
683
  const val = (0, types_1.isWithinOneOf)(field)
684
684
  ? "undefined"
685
685
  : (0, types_1.isMapType)(ctx, messageDesc, field)
@@ -689,7 +689,7 @@ function generateBaseInstanceFactory(ctx, fullName, messageDesc, fullTypeName) {
689
689
  : (0, types_1.isRepeated)(field)
690
690
  ? "[]"
691
691
  : (0, types_1.defaultValue)(ctx, field);
692
- fields.push((0, ts_poet_1.code) `${validatedPropertyName}: ${val}`);
692
+ fields.push((0, ts_poet_1.code) `${fieldKey}: ${val}`);
693
693
  }
694
694
  if ((0, options_1.addTypeToMessages)(options)) {
695
695
  fields.unshift((0, ts_poet_1.code) `$type: '${fullTypeName}'`);
@@ -797,8 +797,8 @@ function generateDecode(ctx, fullName, messageDesc) {
797
797
  `);
798
798
  // add a case for each incoming field
799
799
  messageDesc.field.forEach((field) => {
800
- const { propertyName } = (0, utils_1.propertyNameComposition)(field, options);
801
- const messageProperty = (0, utils_1.getPropertyAccessor)("message", propertyName);
800
+ const fieldName = (0, utils_1.getFieldName)(field, options);
801
+ const messageProperty = (0, utils_1.getPropertyAccessor)("message", fieldName);
802
802
  chunks.push((0, ts_poet_1.code) `case ${field.number}:`);
803
803
  const tag = ((field.number << 3) | (0, types_1.basicWireType)(field.type)) >>> 0;
804
804
  const tagCheck = (0, ts_poet_1.code) `
@@ -884,7 +884,7 @@ function generateDecode(ctx, fullName, messageDesc) {
884
884
  : (0, utils_1.getPropertyAccessor)("message", (0, case_1.maybeSnakeToCamel)(messageDesc.oneofDecl[field.oneofIndex].name, options));
885
885
  chunks.push((0, ts_poet_1.code) `
886
886
  ${tagCheck}
887
- ${oneofNameWithMessage} = { $case: '${propertyName}', ${propertyName}: ${readSnippet} };
887
+ ${oneofNameWithMessage} = { $case: '${fieldName}', ${fieldName}: ${readSnippet} };
888
888
  `);
889
889
  }
890
890
  else {
@@ -1025,8 +1025,8 @@ function generateEncode(ctx, fullName, messageDesc) {
1025
1025
  .reduce((result, field) => ((result[field.oneofIndex] || (result[field.oneofIndex] = [])).push(field), result), {});
1026
1026
  // then add a case for each field
1027
1027
  messageDesc.field.forEach((field) => {
1028
- const { propertyName, validatedPropertyName } = (0, utils_1.propertyNameComposition)(field, options);
1029
- const messageProperty = (0, utils_1.getPropertyAccessor)("message", propertyName);
1028
+ const fieldName = (0, utils_1.getFieldName)(field, options);
1029
+ const messageProperty = (0, utils_1.getPropertyAccessor)("message", fieldName);
1030
1030
  // get a generic writer.doSomething based on the basic type
1031
1031
  const writeSnippet = getEncodeWriteSnippet(ctx, field);
1032
1032
  const isOptional = (0, types_1.isOptionalProperty)(field, messageDesc.options, options);
@@ -1121,7 +1121,7 @@ function generateEncode(ctx, fullName, messageDesc) {
1121
1121
  writer.uint32(${tag}).fork();
1122
1122
  for (const v of ${messageProperty}) {
1123
1123
  if (BigInt.asIntN(64, v) !== v) {
1124
- throw new Error('a value provided in array field ${propertyName} of type ${fieldType} is too large');
1124
+ throw new Error('a value provided in array field ${fieldName} of type ${fieldType} is too large');
1125
1125
  }
1126
1126
  writer.${(0, types_1.toReaderCall)(field)}(${rhs("v")});
1127
1127
  }
@@ -1134,7 +1134,7 @@ function generateEncode(ctx, fullName, messageDesc) {
1134
1134
  writer.uint32(${tag}).fork();
1135
1135
  for (const v of ${messageProperty}) {
1136
1136
  if (BigInt.asUintN(64, v) !== v) {
1137
- throw new Error('a value provided in array field ${propertyName} of type ${fieldType} is too large');
1137
+ throw new Error('a value provided in array field ${fieldName} of type ${fieldType} is too large');
1138
1138
  }
1139
1139
  writer.${(0, types_1.toReaderCall)(field)}(${rhs("v")});
1140
1140
  }
@@ -1469,7 +1469,8 @@ function generateFromJson(ctx, fullName, fullTypeName, messageDesc) {
1469
1469
  // add a check for each incoming field
1470
1470
  messageDesc.field.forEach((field) => {
1471
1471
  var _a;
1472
- const { validatedPropertyName: fieldName } = (0, utils_1.propertyNameComposition)(field, options);
1472
+ const fieldName = (0, utils_1.getFieldName)(field, options);
1473
+ const fieldKey = (0, utils_1.safeAccessor)(fieldName);
1473
1474
  const jsonName = (0, utils_1.getFieldJsonName)(field, options);
1474
1475
  const jsonProperty = (0, utils_1.getPropertyAccessor)("object", jsonName);
1475
1476
  const jsonPropertyOptional = (0, utils_1.getPropertyAccessor)("object", jsonName, true);
@@ -1605,7 +1606,7 @@ function generateFromJson(ctx, fullName, fullTypeName, messageDesc) {
1605
1606
  if ((0, types_1.shouldGenerateJSMapType)(ctx, messageDesc, field)) {
1606
1607
  const fallback = noDefaultValue ? "undefined" : "new Map()";
1607
1608
  chunks.push((0, ts_poet_1.code) `
1608
- ${fieldName}: ${ctx.utils.isObject}(${jsonProperty})
1609
+ ${fieldKey}: ${ctx.utils.isObject}(${jsonProperty})
1609
1610
  ? Object.entries(${jsonProperty}).reduce<${fieldType}>((acc, [key, value]) => {
1610
1611
  acc.set(${i}, ${readSnippet("value")});
1611
1612
  return acc;
@@ -1616,7 +1617,7 @@ function generateFromJson(ctx, fullName, fullTypeName, messageDesc) {
1616
1617
  else {
1617
1618
  const fallback = noDefaultValue ? "undefined" : "{}";
1618
1619
  chunks.push((0, ts_poet_1.code) `
1619
- ${fieldName}: ${ctx.utils.isObject}(${jsonProperty})
1620
+ ${fieldKey}: ${ctx.utils.isObject}(${jsonProperty})
1620
1621
  ? Object.entries(${jsonProperty}).reduce<${fieldType}>((acc, [key, value]) => {
1621
1622
  acc[${i}] = ${readSnippet("value")};
1622
1623
  return acc;
@@ -1629,12 +1630,12 @@ function generateFromJson(ctx, fullName, fullTypeName, messageDesc) {
1629
1630
  const fallback = noDefaultValue ? "undefined" : "[]";
1630
1631
  const readValueSnippet = readSnippet("e");
1631
1632
  if (readValueSnippet.toString() === (0, ts_poet_1.code) `e`.toString()) {
1632
- chunks.push((0, ts_poet_1.code) `${fieldName}: ${ctx.utils.globalThis}.Array.isArray(${jsonPropertyOptional}) ? [...${jsonProperty}] : [],`);
1633
+ chunks.push((0, ts_poet_1.code) `${fieldKey}: ${ctx.utils.globalThis}.Array.isArray(${jsonPropertyOptional}) ? [...${jsonProperty}] : [],`);
1633
1634
  }
1634
1635
  else {
1635
1636
  // Explicit `any` type required to make TS with noImplicitAny happy. `object` is also `any` here.
1636
1637
  chunks.push((0, ts_poet_1.code) `
1637
- ${fieldName}: ${ctx.utils.globalThis}.Array.isArray(${jsonPropertyOptional}) ? ${jsonProperty}.map((e: any) => ${readValueSnippet}): ${fallback},
1638
+ ${fieldKey}: ${ctx.utils.globalThis}.Array.isArray(${jsonPropertyOptional}) ? ${jsonProperty}.map((e: any) => ${readValueSnippet}): ${fallback},
1638
1639
  `);
1639
1640
  }
1640
1641
  }
@@ -1648,26 +1649,26 @@ function generateFromJson(ctx, fullName, fullTypeName, messageDesc) {
1648
1649
  chunks.push((0, ts_poet_1.code) `${fieldName}: `);
1649
1650
  }
1650
1651
  const ternaryIf = (0, ts_poet_1.code) `${ctx.utils.isSet}(${jsonProperty})`;
1651
- const ternaryThen = (0, ts_poet_1.code) `{ $case: '${fieldName}', ${fieldName}: ${readSnippet(`${jsonProperty}`)}`;
1652
+ const ternaryThen = (0, ts_poet_1.code) `{ $case: '${fieldName}', ${fieldKey}: ${readSnippet(`${jsonProperty}`)}`;
1652
1653
  chunks.push((0, ts_poet_1.code) `${ternaryIf} ? ${ternaryThen}} : `);
1653
1654
  if (field === lastCase) {
1654
1655
  chunks.push((0, ts_poet_1.code) `undefined,`);
1655
1656
  }
1656
1657
  }
1657
1658
  else if ((0, types_1.isAnyValueType)(field)) {
1658
- chunks.push((0, ts_poet_1.code) `${fieldName}: ${ctx.utils.isSet}(${jsonPropertyOptional})
1659
+ chunks.push((0, ts_poet_1.code) `${fieldKey}: ${ctx.utils.isSet}(${jsonPropertyOptional})
1659
1660
  ? ${readSnippet(`${jsonProperty}`)}
1660
1661
  : undefined,
1661
1662
  `);
1662
1663
  }
1663
1664
  else if ((0, types_1.isStructType)(field)) {
1664
- chunks.push((0, ts_poet_1.code) `${fieldName}: ${ctx.utils.isObject}(${jsonProperty})
1665
+ chunks.push((0, ts_poet_1.code) `${fieldKey}: ${ctx.utils.isObject}(${jsonProperty})
1665
1666
  ? ${readSnippet(`${jsonProperty}`)}
1666
1667
  : undefined,`);
1667
1668
  }
1668
1669
  else if ((0, types_1.isListValueType)(field)) {
1669
1670
  chunks.push((0, ts_poet_1.code) `
1670
- ${fieldName}: ${ctx.utils.globalThis}.Array.isArray(${jsonProperty})
1671
+ ${fieldKey}: ${ctx.utils.globalThis}.Array.isArray(${jsonProperty})
1671
1672
  ? ${readSnippet(`${jsonProperty}`)}
1672
1673
  : undefined,
1673
1674
  `);
@@ -1675,7 +1676,7 @@ function generateFromJson(ctx, fullName, fullTypeName, messageDesc) {
1675
1676
  else {
1676
1677
  const fallback = (0, types_1.isWithinOneOf)(field) || noDefaultValue ? "undefined" : (0, types_1.defaultValue)(ctx, field);
1677
1678
  chunks.push((0, ts_poet_1.code) `
1678
- ${fieldName}: ${ctx.utils.isSet}(${jsonProperty})
1679
+ ${fieldKey}: ${ctx.utils.isSet}(${jsonProperty})
1679
1680
  ? ${readSnippet(`${jsonProperty}`)}
1680
1681
  : ${fallback},
1681
1682
  `);
@@ -1711,10 +1712,10 @@ function generateToJson(ctx, fullName, fullProtobufTypeName, messageDesc) {
1711
1712
  `);
1712
1713
  // then add a case for each field
1713
1714
  messageDesc.field.forEach((field) => {
1714
- const { validatedPropertyName: fieldName, propertyName } = (0, utils_1.propertyNameComposition)(field, options);
1715
+ const fieldName = (0, utils_1.getFieldName)(field, options);
1715
1716
  const jsonName = (0, utils_1.getFieldJsonName)(field, options);
1716
1717
  const jsonProperty = (0, utils_1.getPropertyAccessor)("obj", jsonName);
1717
- const messageProperty = (0, utils_1.getPropertyAccessor)("message", propertyName);
1718
+ const messageProperty = (0, utils_1.getPropertyAccessor)("message", fieldName);
1718
1719
  const readSnippet = (from) => {
1719
1720
  if ((0, types_1.isEnum)(field)) {
1720
1721
  const toJson = (0, types_1.getEnumMethod)(ctx, field.typeName, "ToJSON");
@@ -1902,9 +1903,9 @@ function generateFromPartial(ctx, fullName, messageDesc) {
1902
1903
  chunks.push((0, ts_poet_1.code) `const message = ${createBase}${maybeAsAny(options)};`);
1903
1904
  // add a check for each incoming field
1904
1905
  messageDesc.field.forEach((field) => {
1905
- const { propertyName } = (0, utils_1.propertyNameComposition)(field, options);
1906
- const messageProperty = (0, utils_1.getPropertyAccessor)("message", propertyName);
1907
- const objectProperty = (0, utils_1.getPropertyAccessor)("object", propertyName);
1906
+ const fieldName = (0, utils_1.getFieldName)(field, options);
1907
+ const messageProperty = (0, utils_1.getPropertyAccessor)("message", fieldName);
1908
+ const objectProperty = (0, utils_1.getPropertyAccessor)("object", fieldName);
1908
1909
  const readSnippet = (from) => {
1909
1910
  if (((0, types_1.isLong)(field) || (0, types_1.isLongValueType)(field)) && options.forceLong === options_1.LongOption.LONG) {
1910
1911
  return (0, ts_poet_1.code) `Long.fromValue(${from})`;
@@ -2009,19 +2010,17 @@ function generateFromPartial(ctx, fullName, messageDesc) {
2009
2010
  }
2010
2011
  }
2011
2012
  else if ((0, types_1.isWithinOneOfThatShouldBeUnion)(options, field)) {
2012
- const oneofName = options.useJsonName
2013
- ? propertyName
2014
- : (0, case_1.maybeSnakeToCamel)(messageDesc.oneofDecl[field.oneofIndex].name, options);
2013
+ const oneofName = (0, case_1.maybeSnakeToCamel)(messageDesc.oneofDecl[field.oneofIndex].name, options);
2015
2014
  const oneofNameWithMessage = (0, utils_1.getPropertyAccessor)("message", oneofName);
2016
2015
  const oneofNameWithObject = (0, utils_1.getPropertyAccessor)("object", oneofName);
2017
- const v = readSnippet(`${oneofNameWithObject}.${propertyName}`);
2016
+ const v = readSnippet(`${oneofNameWithObject}.${fieldName}`);
2018
2017
  chunks.push((0, ts_poet_1.code) `
2019
2018
  if (
2020
- ${oneofNameWithObject}?.$case === '${propertyName}'
2021
- && ${oneofNameWithObject}?.${propertyName} !== undefined
2022
- && ${oneofNameWithObject}?.${propertyName} !== null
2019
+ ${oneofNameWithObject}?.$case === '${fieldName}'
2020
+ && ${oneofNameWithObject}?.${fieldName} !== undefined
2021
+ && ${oneofNameWithObject}?.${fieldName} !== null
2023
2022
  ) {
2024
- ${oneofNameWithMessage} = { $case: '${propertyName}', ${propertyName}: ${v} };
2023
+ ${oneofNameWithMessage} = { $case: '${fieldName}', ${fieldName}: ${v} };
2025
2024
  }
2026
2025
  `);
2027
2026
  }
package/build/utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.impProto = exports.impFile = exports.getPropertyAccessor = exports.propertyNameComposition = exports.getFieldJsonName = exports.FormattedMethodDescriptor = exports.assertInstanceOf = exports.maybePrefixPackage = exports.prefixDisableLinter = exports.maybeAddComment = exports.upperFirst = exports.lowerFirst = exports.singular = exports.fail = exports.readToBuffer = exports.generateIndexFiles = exports.protoFilesToGenerate = void 0;
3
+ exports.impProto = exports.impFile = exports.getPropertyAccessor = exports.safeAccessor = exports.getFieldName = exports.getFieldJsonName = exports.FormattedMethodDescriptor = exports.assertInstanceOf = exports.maybePrefixPackage = exports.prefixDisableLinter = exports.maybeAddComment = exports.upperFirst = exports.lowerFirst = exports.singular = exports.fail = exports.readToBuffer = exports.generateIndexFiles = exports.protoFilesToGenerate = void 0;
4
4
  const path = require("path");
5
5
  const ts_poet_1 = require("ts-poet");
6
6
  const options_1 = require("./options");
@@ -199,30 +199,24 @@ function getFieldJsonName(field, options) {
199
199
  }
200
200
  }
201
201
  exports.getFieldJsonName = getFieldJsonName;
202
- function propertyNameComposition(field, options) {
202
+ function getFieldName(field, options) {
203
203
  if (options.useJsonName) {
204
- const jsonName = field.jsonName;
205
- return {
206
- propertyName: jsonName,
207
- validatedPropertyName: validateObjectProperty(jsonName),
208
- };
209
- }
210
- const propertyName = (0, case_1.maybeSnakeToCamel)(field.name, options);
211
- return {
212
- propertyName,
213
- validatedPropertyName: propertyName,
214
- };
204
+ return field.jsonName;
205
+ }
206
+ return (0, case_1.maybeSnakeToCamel)(field.name, options);
215
207
  }
216
- exports.propertyNameComposition = propertyNameComposition;
208
+ exports.getFieldName = getFieldName;
217
209
  /**
218
210
  * https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/the-dangers-of-square-bracket-notation.md
219
211
  */
220
- function isValidateObjectProperty(propertyName) {
212
+ function isValidIdentifier(propertyName) {
221
213
  return /^[a-zA-Z_$][\w$]*$/.test(propertyName);
222
214
  }
223
- function validateObjectProperty(propertyName) {
224
- return isValidateObjectProperty(propertyName) ? propertyName : JSON.stringify(propertyName);
215
+ /** Returns `bar` or `"bar"` if `propertyName` isn't a safe property name. */
216
+ function safeAccessor(propertyName) {
217
+ return isValidIdentifier(propertyName) ? propertyName : JSON.stringify(propertyName);
225
218
  }
219
+ exports.safeAccessor = safeAccessor;
226
220
  /**
227
221
  * Returns a snippet for reading an object's property, such as `foo.bar`, or `foo['bar']` if the property name contains unusual characters.
228
222
  * For simplicity, we don't match the ECMA 5/6 rules for valid identifiers exactly, and return array syntax liberally.
@@ -231,9 +225,9 @@ function validateObjectProperty(propertyName) {
231
225
  * @param optional
232
226
  */
233
227
  function getPropertyAccessor(objectName, propertyName, optional = false) {
234
- return isValidateObjectProperty(propertyName)
228
+ return isValidIdentifier(propertyName)
235
229
  ? `${objectName}${optional ? "?" : ""}.${propertyName}`
236
- : `${objectName}${optional ? "?." : ""}[${validateObjectProperty(propertyName)}]`;
230
+ : `${objectName}${optional ? "?." : ""}[${safeAccessor(propertyName)}]`;
237
231
  }
238
232
  exports.getPropertyAccessor = getPropertyAccessor;
239
233
  function impFile(options, spec) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-proto",
3
- "version": "1.162.0",
3
+ "version": "1.162.1",
4
4
  "description": "",
5
5
  "main": "build/plugin.js",
6
6
  "repository": "github:stephenh/ts-proto",