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 +35 -36
- package/build/utils.js +13 -19
- package/package.json +1 -1
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
|
|
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)}${
|
|
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.
|
|
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
|
|
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) `${
|
|
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
|
|
801
|
-
const messageProperty = (0, utils_1.getPropertyAccessor)("message",
|
|
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: '${
|
|
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
|
|
1029
|
-
const messageProperty = (0, utils_1.getPropertyAccessor)("message",
|
|
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 ${
|
|
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 ${
|
|
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
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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) `${
|
|
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
|
-
${
|
|
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}', ${
|
|
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) `${
|
|
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) `${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
|
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",
|
|
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
|
|
1906
|
-
const messageProperty = (0, utils_1.getPropertyAccessor)("message",
|
|
1907
|
-
const objectProperty = (0, utils_1.getPropertyAccessor)("object",
|
|
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
|
|
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}.${
|
|
2016
|
+
const v = readSnippet(`${oneofNameWithObject}.${fieldName}`);
|
|
2018
2017
|
chunks.push((0, ts_poet_1.code) `
|
|
2019
2018
|
if (
|
|
2020
|
-
${oneofNameWithObject}?.$case === '${
|
|
2021
|
-
&& ${oneofNameWithObject}?.${
|
|
2022
|
-
&& ${oneofNameWithObject}?.${
|
|
2019
|
+
${oneofNameWithObject}?.$case === '${fieldName}'
|
|
2020
|
+
&& ${oneofNameWithObject}?.${fieldName} !== undefined
|
|
2021
|
+
&& ${oneofNameWithObject}?.${fieldName} !== null
|
|
2023
2022
|
) {
|
|
2024
|
-
${oneofNameWithMessage} = { $case: '${
|
|
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.
|
|
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
|
|
202
|
+
function getFieldName(field, options) {
|
|
203
203
|
if (options.useJsonName) {
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
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.
|
|
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
|
|
212
|
+
function isValidIdentifier(propertyName) {
|
|
221
213
|
return /^[a-zA-Z_$][\w$]*$/.test(propertyName);
|
|
222
214
|
}
|
|
223
|
-
|
|
224
|
-
|
|
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
|
|
228
|
+
return isValidIdentifier(propertyName)
|
|
235
229
|
? `${objectName}${optional ? "?" : ""}.${propertyName}`
|
|
236
|
-
: `${objectName}${optional ? "?." : ""}[${
|
|
230
|
+
: `${objectName}${optional ? "?." : ""}[${safeAccessor(propertyName)}]`;
|
|
237
231
|
}
|
|
238
232
|
exports.getPropertyAccessor = getPropertyAccessor;
|
|
239
233
|
function impFile(options, spec) {
|