ts-proto 1.156.6 → 1.156.8
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 +24 -15
- package/build/types.js +25 -2
- package/package.json +2 -2
package/build/main.js
CHANGED
|
@@ -67,8 +67,10 @@ function generateFile(ctx, fileDesc) {
|
|
|
67
67
|
});
|
|
68
68
|
// If nestJs=true export [package]_PACKAGE_NAME and [service]_SERVICE_NAME const
|
|
69
69
|
if (options.nestJs) {
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
if (options.exportCommonSymbols) {
|
|
71
|
+
const prefix = (0, case_1.camelToSnake)(fileDesc.package.replace(/\./g, "_"));
|
|
72
|
+
chunks.push((0, ts_poet_1.code) `export const ${prefix}_PACKAGE_NAME = '${fileDesc.package}';`);
|
|
73
|
+
}
|
|
72
74
|
if (options.useDate === options_1.DateOption.DATE &&
|
|
73
75
|
fileDesc.messageType.find((message) => message.field.find((field) => field.typeName === ".google.protobuf.Timestamp"))) {
|
|
74
76
|
chunks.push(makeProtobufTimestampWrapper());
|
|
@@ -677,7 +679,7 @@ function generateBaseInstanceFactory(ctx, fullName, messageDesc, fullTypeName) {
|
|
|
677
679
|
const val = (0, types_1.isWithinOneOf)(field)
|
|
678
680
|
? "undefined"
|
|
679
681
|
: (0, types_1.isMapType)(ctx, messageDesc, field)
|
|
680
|
-
? ctx
|
|
682
|
+
? (0, types_1.shouldGenerateJSMapType)(ctx, messageDesc, field)
|
|
681
683
|
? "new Map()"
|
|
682
684
|
: "{}"
|
|
683
685
|
: (0, types_1.isRepeated)(field)
|
|
@@ -805,16 +807,22 @@ function generateDecode(ctx, fullName, messageDesc) {
|
|
|
805
807
|
const initializerNecessary = !options.initializeFieldsAsUndefined && (0, types_1.isOptionalProperty)(field, messageDesc.options, options);
|
|
806
808
|
if ((0, types_1.isRepeated)(field)) {
|
|
807
809
|
const maybeNonNullAssertion = ctx.options.useOptionals === "all" ? "!" : "";
|
|
808
|
-
|
|
810
|
+
const mapType = (0, types_1.detectMapType)(ctx, messageDesc, field);
|
|
811
|
+
if (mapType) {
|
|
809
812
|
// We need a unique const within the `cast` statement
|
|
810
813
|
const varName = `entry${field.number}`;
|
|
811
|
-
const
|
|
812
|
-
|
|
813
|
-
|
|
814
|
+
const generateMapType = (0, types_1.shouldGenerateJSMapType)(ctx, messageDesc, field);
|
|
815
|
+
let valueSetterSnippet;
|
|
816
|
+
if (generateMapType) {
|
|
817
|
+
valueSetterSnippet = `message.${fieldName}${maybeNonNullAssertion}.set(${varName}.key, ${varName}.value)`;
|
|
818
|
+
}
|
|
819
|
+
else {
|
|
820
|
+
valueSetterSnippet = `message.${fieldName}${maybeNonNullAssertion}[${varName}.key] = ${varName}.value`;
|
|
821
|
+
}
|
|
814
822
|
const initializerSnippet = initializerNecessary
|
|
815
823
|
? `
|
|
816
824
|
if (message.${fieldName} === undefined) {
|
|
817
|
-
message.${fieldName} = ${
|
|
825
|
+
message.${fieldName} = ${generateMapType ? "new Map()" : "{}"};
|
|
818
826
|
}`
|
|
819
827
|
: "";
|
|
820
828
|
chunks.push((0, ts_poet_1.code) `
|
|
@@ -1008,8 +1016,9 @@ function generateEncode(ctx, fullName, messageDesc) {
|
|
|
1008
1016
|
}
|
|
1009
1017
|
`
|
|
1010
1018
|
: writeSnippet(`{ ${maybeTypeField} key: key as any, value }`);
|
|
1011
|
-
const
|
|
1012
|
-
|
|
1019
|
+
const useMapType = (0, types_1.shouldGenerateJSMapType)(ctx, messageDesc, field);
|
|
1020
|
+
const optionalAlternative = isOptional ? (useMapType ? " || new Map()" : " || {}") : "";
|
|
1021
|
+
if (useMapType) {
|
|
1013
1022
|
chunks.push((0, ts_poet_1.code) `
|
|
1014
1023
|
(message.${fieldName}${optionalAlternative}).forEach((value, key) => {
|
|
1015
1024
|
${entryWriteSnippet}
|
|
@@ -1532,7 +1541,7 @@ function generateFromJson(ctx, fullName, fullTypeName, messageDesc) {
|
|
|
1532
1541
|
if ((0, types_1.isMapType)(ctx, messageDesc, field)) {
|
|
1533
1542
|
const fieldType = (0, types_1.toTypeName)(ctx, messageDesc, field);
|
|
1534
1543
|
const i = convertFromObjectKey(ctx, messageDesc, field, "key");
|
|
1535
|
-
if (
|
|
1544
|
+
if ((0, types_1.shouldGenerateJSMapType)(ctx, messageDesc, field)) {
|
|
1536
1545
|
const fallback = noDefaultValue ? "undefined" : "new Map()";
|
|
1537
1546
|
chunks.push((0, ts_poet_1.code) `
|
|
1538
1547
|
${fieldName}: ${ctx.utils.isObject}(${jsonProperty})
|
|
@@ -1733,7 +1742,7 @@ function generateToJson(ctx, fullName, fullProtobufTypeName, messageDesc) {
|
|
|
1733
1742
|
if ((0, types_1.isMapType)(ctx, messageDesc, field)) {
|
|
1734
1743
|
// Maps might need their values transformed, i.e. bytes --> base64
|
|
1735
1744
|
const i = convertToObjectKey(ctx, messageDesc, field, "k");
|
|
1736
|
-
if (
|
|
1745
|
+
if ((0, types_1.shouldGenerateJSMapType)(ctx, messageDesc, field)) {
|
|
1737
1746
|
chunks.push((0, ts_poet_1.code) `
|
|
1738
1747
|
if (message.${fieldName}?.size) {
|
|
1739
1748
|
${jsonProperty} = {};
|
|
@@ -1901,7 +1910,7 @@ function generateFromPartial(ctx, fullName, messageDesc) {
|
|
|
1901
1910
|
const noValueSnippet = noDefaultValue
|
|
1902
1911
|
? `(object.${fieldName} === undefined || object.${fieldName} === null) ? undefined : `
|
|
1903
1912
|
: "";
|
|
1904
|
-
if (
|
|
1913
|
+
if ((0, types_1.shouldGenerateJSMapType)(ctx, messageDesc, field)) {
|
|
1905
1914
|
chunks.push((0, ts_poet_1.code) `
|
|
1906
1915
|
message.${fieldName} = ${noValueSnippet} (() => {
|
|
1907
1916
|
const m = new Map();
|
|
@@ -1970,7 +1979,7 @@ function convertFromObjectKey(ctx, messageDesc, field, variableName) {
|
|
|
1970
1979
|
if (keyType.toCodeString([]) === "string") {
|
|
1971
1980
|
return (0, ts_poet_1.code) `${variableName}`;
|
|
1972
1981
|
}
|
|
1973
|
-
else if ((0, types_1.isLong)(keyField) &&
|
|
1982
|
+
else if ((0, types_1.isLong)(keyField) && (0, types_1.shouldGenerateJSMapType)(ctx, messageDesc, field)) {
|
|
1974
1983
|
if (ctx.options.forceLong === options_1.LongOption.LONG) {
|
|
1975
1984
|
return (0, ts_poet_1.code) `${(0, case_1.capitalize)(keyType.toCodeString([]))}.fromValue(${variableName})`;
|
|
1976
1985
|
}
|
|
@@ -1993,7 +2002,7 @@ function convertToObjectKey(ctx, messageDesc, field, variableName) {
|
|
|
1993
2002
|
if (keyType.toCodeString([]) === "string") {
|
|
1994
2003
|
return (0, ts_poet_1.code) `${variableName}`;
|
|
1995
2004
|
}
|
|
1996
|
-
else if ((0, types_1.isLong)(keyField) &&
|
|
2005
|
+
else if ((0, types_1.isLong)(keyField) && (0, types_1.shouldGenerateJSMapType)(ctx, messageDesc, field)) {
|
|
1997
2006
|
if (ctx.options.forceLong === options_1.LongOption.LONG) {
|
|
1998
2007
|
return (0, ts_poet_1.code) `${ctx.utils.longToNumber}(${variableName})`;
|
|
1999
2008
|
}
|
package/build/types.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.detectBatchMethod = exports.responsePromiseOrObservable = exports.responseObservable = exports.responsePromise = exports.responseType = exports.requestType = exports.observableType = exports.rawRequestType = exports.detectMapType = exports.toTypeName = exports.getEnumMethod = exports.messageToTypeName = exports.wrapperTypeName = exports.valueTypeName = exports.isEmptyType = exports.isLongValueType = exports.isStructTypeName = exports.isStructType = exports.isListValueTypeName = exports.isListValueType = exports.isFieldMaskTypeName = exports.isFieldMaskType = exports.isBytesValueType = exports.isAnyValueTypeName = exports.isAnyValueType = exports.isValueType = exports.isTimestamp = exports.isObjectId = exports.isMapType = exports.isWholeNumber = exports.isLong = exports.isRepeated = exports.isWithinOneOfThatShouldBeUnion = exports.isWithinOneOf = exports.isEnum = exports.isMessage = exports.isBytes = exports.isPrimitive = exports.isOptionalProperty = exports.isScalar = exports.createTypeMap = exports.notDefaultCheck = exports.defaultValue = exports.packedType = exports.toReaderCall = exports.basicTypeName = exports.basicLongWireType = exports.basicWireType = void 0;
|
|
3
|
+
exports.detectBatchMethod = exports.responsePromiseOrObservable = exports.responseObservable = exports.responsePromise = exports.responseType = exports.requestType = exports.observableType = exports.rawRequestType = exports.detectMapType = exports.shouldGenerateJSMapType = exports.toTypeName = exports.getEnumMethod = exports.messageToTypeName = exports.wrapperTypeName = exports.valueTypeName = exports.isEmptyType = exports.isLongValueType = exports.isStructTypeName = exports.isStructType = exports.isListValueTypeName = exports.isListValueType = exports.isFieldMaskTypeName = exports.isFieldMaskType = exports.isBytesValueType = exports.isAnyValueTypeName = exports.isAnyValueType = exports.isValueType = exports.isTimestamp = exports.isObjectId = exports.isMapType = exports.isWholeNumber = exports.isLong = exports.isRepeated = exports.isWithinOneOfThatShouldBeUnion = exports.isWithinOneOf = exports.isEnum = exports.isMessage = exports.isBytes = exports.isPrimitive = exports.isOptionalProperty = exports.isScalar = exports.createTypeMap = exports.notDefaultCheck = exports.defaultValue = exports.packedType = exports.toReaderCall = exports.basicTypeName = exports.basicLongWireType = exports.basicWireType = void 0;
|
|
4
4
|
const ts_proto_descriptors_1 = require("ts-proto-descriptors");
|
|
5
5
|
const ts_poet_1 = require("ts-poet");
|
|
6
6
|
const options_1 = require("./options");
|
|
@@ -587,7 +587,7 @@ function toTypeName(ctx, messageDesc, field, ensureOptional = false) {
|
|
|
587
587
|
const mapType = messageDesc ? detectMapType(ctx, messageDesc, field) : false;
|
|
588
588
|
if (mapType) {
|
|
589
589
|
const { keyType, valueType } = mapType;
|
|
590
|
-
if (ctx
|
|
590
|
+
if (shouldGenerateJSMapType(ctx, messageDesc, field)) {
|
|
591
591
|
return finalize((0, ts_poet_1.code) `Map<${keyType}, ${valueType}>`, ensureOptional);
|
|
592
592
|
}
|
|
593
593
|
return finalize((0, ts_poet_1.code) `{ [key: ${keyType} ]: ${valueType} }`, ensureOptional);
|
|
@@ -622,6 +622,29 @@ function toTypeName(ctx, messageDesc, field, ensureOptional = false) {
|
|
|
622
622
|
ensureOptional);
|
|
623
623
|
}
|
|
624
624
|
exports.toTypeName = toTypeName;
|
|
625
|
+
/**
|
|
626
|
+
* For a protobuf map field, if the generated code should use the javascript Map type.
|
|
627
|
+
*
|
|
628
|
+
* If the type of a protobuf map key corresponds to the Long type, we always use the Map type. This avoids generating
|
|
629
|
+
* invalid code such as below (using Long as key of a javascript object):
|
|
630
|
+
*
|
|
631
|
+
* export interface Foo {
|
|
632
|
+
* bar: { [key: Long]: Long }
|
|
633
|
+
* }
|
|
634
|
+
*
|
|
635
|
+
* See https://github.com/stephenh/ts-proto/issues/708 for more details.
|
|
636
|
+
*/
|
|
637
|
+
function shouldGenerateJSMapType(ctx, message, field) {
|
|
638
|
+
if (ctx.options.useMapType) {
|
|
639
|
+
return true;
|
|
640
|
+
}
|
|
641
|
+
const mapType = detectMapType(ctx, message, field);
|
|
642
|
+
if (!mapType) {
|
|
643
|
+
return false;
|
|
644
|
+
}
|
|
645
|
+
return isLong(mapType.keyField) && ctx.options.forceLong === options_1.LongOption.LONG;
|
|
646
|
+
}
|
|
647
|
+
exports.shouldGenerateJSMapType = shouldGenerateJSMapType;
|
|
625
648
|
function detectMapType(ctx, messageDesc, fieldDesc) {
|
|
626
649
|
var _a;
|
|
627
650
|
const { typeMap } = ctx;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-proto",
|
|
3
|
-
"version": "1.156.
|
|
3
|
+
"version": "1.156.8",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "build/plugin.js",
|
|
6
6
|
"repository": "github:stephenh/ts-proto",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"mongodb": "^5.7.0",
|
|
55
55
|
"nice-grpc": "^2.1.4",
|
|
56
56
|
"object-hash": "^3.0.0",
|
|
57
|
-
"prettier": "^
|
|
57
|
+
"prettier": "^2.8.8",
|
|
58
58
|
"protobufjs-cli": "^1.1.1",
|
|
59
59
|
"reflect-metadata": "^0.1.13",
|
|
60
60
|
"rxjs": "^7.8.1",
|