Skip to content

Commit 7f8b8df

Browse files
authored
Merge pull request #2 from postmanlabs/feature/make-experimental-map-field-decode-opt-in
fix: make experimental map field decode opt-in
2 parents d9a0dc9 + d1ccc7f commit 7f8b8df

File tree

4 files changed

+32
-19
lines changed

4 files changed

+32
-19
lines changed

package-lock.json

Lines changed: 11 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"@types/lodash.set": "^4.3.6",
99
"google-protobuf": "^3.12.2",
1010
"lodash.set": "^4.3.2",
11-
"@postman/protobufjs": "^7.3.2-postman.2"
11+
"@postman/protobufjs": "^7.3.2-postman.3"
1212
},
1313
"devDependencies": {
1414
"@postman/grpc-js": "1.10.8-postman.3",
@@ -58,6 +58,6 @@
5858
],
5959
"types": "build/src/index.d.ts",
6060
"peerDependencies": {
61-
"@postman/grpc-js": "1.10.8-postman.3"
61+
"@postman/grpc-js": "1.11.0-postman.1"
6262
}
6363
}

src/client.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,15 @@ export class Client {
1717
metadata: Metadata;
1818
grpcClient: services.IServerReflectionClient;
1919
private fileDescriptorCache: Map<string, IFileDescriptorProto> = new Map();
20+
private reflectionOptions?: {
21+
useExperimentalMapFieldDecoding?: boolean;
22+
};
2023
constructor(
2124
url: string,
2225
credentials: ChannelCredentials,
2326
options?: object,
24-
metadata?: Metadata
27+
metadata?: Metadata,
28+
reflectionOptions?: Client['reflectionOptions']
2529
) {
2630
this.fileDescriptorCache = new Map();
2731
this.metadata = metadata || new Metadata();
@@ -30,6 +34,7 @@ export class Client {
3034
credentials,
3135
options
3236
);
37+
this.reflectionOptions = reflectionOptions;
3338
}
3439

3540
listServices(): Promise<string[]> {
@@ -87,7 +92,10 @@ export class Client {
8792
);
8893
const fileDescriptorSet = FileDescriptorSet.create();
8994
set(fileDescriptorSet, 'file', Array.from(fileDescriptorMap.values()));
90-
return getDescriptorRootFromDescriptorSet(fileDescriptorSet);
95+
return getDescriptorRootFromDescriptorSet(
96+
fileDescriptorSet,
97+
this.reflectionOptions?.useExperimentalMapFieldDecoding
98+
);
9199
}
92100

93101
private async resolveDescriptorRecursive(

src/descriptor.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,30 @@ const set = require('lodash.set');
1111
* Get Protobuf.js Root object from the serialized FileDescriptorProto messages
1212
* that gotten from reflection service.
1313
* @param {Array<Uint8Array|string>|undefined} file_descriptor_protos - Reflection descriptor protos
14+
* @param {boolean} [useMapField=false] - Use experimental map field decoding support of protobufjs
1415
* @return {Root} Protobuf.js Root object
1516
*/
1617
// eslint-disable-next-line node/no-unsupported-features/es-syntax
17-
export function getDescriptorRoot(file_descriptor_protos) {
18+
export function getDescriptorRoot(file_descriptor_protos, useMapField = false) {
1819
const descriptorSet = Descriptor.FileDescriptorSet.create();
1920

2021
file_descriptor_protos.forEach((descriptorByte, i) => {
2122
const descriptor = Descriptor.FileDescriptorProto.decode(descriptorByte);
2223
set(descriptorSet, 'file[' + i + ']', descriptor);
2324
});
24-
return protobuf.Root.fromDescriptor(descriptorSet, {useMapField: true});
25+
return protobuf.Root.fromDescriptor(descriptorSet, {useMapField});
2526
}
2627

2728
/**
2829
* Get Protobuf.js Root object from FileDescriptorSet
2930
* @param {Message file_descriptor_set - File descriptor set
31+
* @param {boolean} [useMapField=false] - Use experimental map field decoding support of protobufjs
3032
* @return {Root} Protobuf.js Root object
3133
*/
3234
// eslint-disable-next-line node/no-unsupported-features/es-syntax
33-
export function getDescriptorRootFromDescriptorSet(file_descriptor_set) {
34-
return protobuf.Root.fromDescriptor(file_descriptor_set, {useMapField: true});
35+
export function getDescriptorRootFromDescriptorSet(
36+
file_descriptor_set,
37+
useMapField = false
38+
) {
39+
return protobuf.Root.fromDescriptor(file_descriptor_set, {useMapField});
3540
}

0 commit comments

Comments
 (0)