ts-proto 1.156.6 → 1.156.7
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 +20 -13
- package/build/types.js +25 -2
- package/package.json +2 -2
package/build/main.js
CHANGED
|
@@ -677,7 +677,7 @@ function generateBaseInstanceFactory(ctx, fullName, messageDesc, fullTypeName) {
|
|
|
677
677
|
const val = (0, types_1.isWithinOneOf)(field)
|
|
678
678
|
? "undefined"
|
|
679
679
|
: (0, types_1.isMapType)(ctx, messageDesc, field)
|
|
680
|
-
? ctx
|
|
680
|
+
? (0, types_1.shouldGenerateJSMapType)(ctx, messageDesc, field)
|
|
681
681
|
? "new Map()"
|
|
682
682
|
: "{}"
|
|
683
683
|
: (0, types_1.isRepeated)(field)
|
|
@@ -805,16 +805,22 @@ function generateDecode(ctx, fullName, messageDesc) {
|
|
|
805
805
|
const initializerNecessary = !options.initializeFieldsAsUndefined && (0, types_1.isOptionalProperty)(field, messageDesc.options, options);
|
|
806
806
|
if ((0, types_1.isRepeated)(field)) {
|
|
807
807
|
const maybeNonNullAssertion = ctx.options.useOptionals === "all" ? "!" : "";
|
|
808
|
-
|
|
808
|
+
const mapType = (0, types_1.detectMapType)(ctx, messageDesc, field);
|
|
809
|
+
if (mapType) {
|
|
809
810
|
// We need a unique const within the `cast` statement
|
|
810
811
|
const varName = `entry${field.number}`;
|
|
811
|
-
const
|
|
812
|
-
|
|
813
|
-
|
|
812
|
+
const generateMapType = (0, types_1.shouldGenerateJSMapType)(ctx, messageDesc, field);
|
|
813
|
+
let valueSetterSnippet;
|
|
814
|
+
if (generateMapType) {
|
|
815
|
+
valueSetterSnippet = `message.${fieldName}${maybeNonNullAssertion}.set(${varName}.key, ${varName}.value)`;
|
|
816
|
+
}
|
|
817
|
+
else {
|
|
818
|
+
valueSetterSnippet = `message.${fieldName}${maybeNonNullAssertion}[${varName}.key] = ${varName}.value`;
|
|
819
|
+
}
|
|
814
820
|
const initializerSnippet = initializerNecessary
|
|
815
821
|
? `
|
|
816
822
|
if (message.${fieldName} === undefined) {
|
|
817
|
-
message.${fieldName} = ${
|
|
823
|
+
message.${fieldName} = ${generateMapType ? "new Map()" : "{}"};
|
|
818
824
|
}`
|
|
819
825
|
: "";
|
|
820
826
|
chunks.push((0, ts_poet_1.code) `
|
|
@@ -1008,8 +1014,9 @@ function generateEncode(ctx, fullName, messageDesc) {
|
|
|
1008
1014
|
}
|
|
1009
1015
|
`
|
|
1010
1016
|
: writeSnippet(`{ ${maybeTypeField} key: key as any, value }`);
|
|
1011
|
-
const
|
|
1012
|
-
|
|
1017
|
+
const useMapType = (0, types_1.shouldGenerateJSMapType)(ctx, messageDesc, field);
|
|
1018
|
+
const optionalAlternative = isOptional ? (useMapType ? " || new Map()" : " || {}") : "";
|
|
1019
|
+
if (useMapType) {
|
|
1013
1020
|
chunks.push((0, ts_poet_1.code) `
|
|
1014
1021
|
(message.${fieldName}${optionalAlternative}).forEach((value, key) => {
|
|
1015
1022
|
${entryWriteSnippet}
|
|
@@ -1532,7 +1539,7 @@ function generateFromJson(ctx, fullName, fullTypeName, messageDesc) {
|
|
|
1532
1539
|
if ((0, types_1.isMapType)(ctx, messageDesc, field)) {
|
|
1533
1540
|
const fieldType = (0, types_1.toTypeName)(ctx, messageDesc, field);
|
|
1534
1541
|
const i = convertFromObjectKey(ctx, messageDesc, field, "key");
|
|
1535
|
-
if (
|
|
1542
|
+
if ((0, types_1.shouldGenerateJSMapType)(ctx, messageDesc, field)) {
|
|
1536
1543
|
const fallback = noDefaultValue ? "undefined" : "new Map()";
|
|
1537
1544
|
chunks.push((0, ts_poet_1.code) `
|
|
1538
1545
|
${fieldName}: ${ctx.utils.isObject}(${jsonProperty})
|
|
@@ -1733,7 +1740,7 @@ function generateToJson(ctx, fullName, fullProtobufTypeName, messageDesc) {
|
|
|
1733
1740
|
if ((0, types_1.isMapType)(ctx, messageDesc, field)) {
|
|
1734
1741
|
// Maps might need their values transformed, i.e. bytes --> base64
|
|
1735
1742
|
const i = convertToObjectKey(ctx, messageDesc, field, "k");
|
|
1736
|
-
if (
|
|
1743
|
+
if ((0, types_1.shouldGenerateJSMapType)(ctx, messageDesc, field)) {
|
|
1737
1744
|
chunks.push((0, ts_poet_1.code) `
|
|
1738
1745
|
if (message.${fieldName}?.size) {
|
|
1739
1746
|
${jsonProperty} = {};
|
|
@@ -1901,7 +1908,7 @@ function generateFromPartial(ctx, fullName, messageDesc) {
|
|
|
1901
1908
|
const noValueSnippet = noDefaultValue
|
|
1902
1909
|
? `(object.${fieldName} === undefined || object.${fieldName} === null) ? undefined : `
|
|
1903
1910
|
: "";
|
|
1904
|
-
if (
|
|
1911
|
+
if ((0, types_1.shouldGenerateJSMapType)(ctx, messageDesc, field)) {
|
|
1905
1912
|
chunks.push((0, ts_poet_1.code) `
|
|
1906
1913
|
message.${fieldName} = ${noValueSnippet} (() => {
|
|
1907
1914
|
const m = new Map();
|
|
@@ -1970,7 +1977,7 @@ function convertFromObjectKey(ctx, messageDesc, field, variableName) {
|
|
|
1970
1977
|
if (keyType.toCodeString([]) === "string") {
|
|
1971
1978
|
return (0, ts_poet_1.code) `${variableName}`;
|
|
1972
1979
|
}
|
|
1973
|
-
else if ((0, types_1.isLong)(keyField) &&
|
|
1980
|
+
else if ((0, types_1.isLong)(keyField) && (0, types_1.shouldGenerateJSMapType)(ctx, messageDesc, field)) {
|
|
1974
1981
|
if (ctx.options.forceLong === options_1.LongOption.LONG) {
|
|
1975
1982
|
return (0, ts_poet_1.code) `${(0, case_1.capitalize)(keyType.toCodeString([]))}.fromValue(${variableName})`;
|
|
1976
1983
|
}
|
|
@@ -1993,7 +2000,7 @@ function convertToObjectKey(ctx, messageDesc, field, variableName) {
|
|
|
1993
2000
|
if (keyType.toCodeString([]) === "string") {
|
|
1994
2001
|
return (0, ts_poet_1.code) `${variableName}`;
|
|
1995
2002
|
}
|
|
1996
|
-
else if ((0, types_1.isLong)(keyField) &&
|
|
2003
|
+
else if ((0, types_1.isLong)(keyField) && (0, types_1.shouldGenerateJSMapType)(ctx, messageDesc, field)) {
|
|
1997
2004
|
if (ctx.options.forceLong === options_1.LongOption.LONG) {
|
|
1998
2005
|
return (0, ts_poet_1.code) `${ctx.utils.longToNumber}(${variableName})`;
|
|
1999
2006
|
}
|
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.7",
|
|
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",
|