diff --git a/packages/proto-loader/src/index.ts b/packages/proto-loader/src/index.ts index 9182fa8a..cf5976bc 100644 --- a/packages/proto-loader/src/index.ts +++ b/packages/proto-loader/src/index.ts @@ -250,7 +250,18 @@ function createSerializer(cls: Protobuf.Type): Serialize { } function mapMethodOptions(options: Partial[] | undefined): MethodOptions { - return (options || []).reduce((obj: MethodOptions, item: Partial) => ({ ...obj, ...item }), + return (options || []).reduce((obj: MethodOptions, item: Partial) => { + for (const [key, value] of Object.entries(item)) { + switch (key) { + case 'uninterpreted_option' : + obj.uninterpreted_option.push(item.uninterpreted_option as UninterpretedOption); + break; + default: + obj[key] = value + } + } + return obj + }, { deprecated: false, idempotency_level: IdempotencyLevel.IDEMPOTENCY_UNKNOWN, diff --git a/packages/proto-loader/test/descriptor_type_test.ts b/packages/proto-loader/test/descriptor_type_test.ts index f9994979..7a2ed393 100644 --- a/packages/proto-loader/test/descriptor_type_test.ts +++ b/packages/proto-loader/test/descriptor_type_test.ts @@ -140,10 +140,10 @@ describe('Descriptor types', () => { assert.deepStrictEqual(service.Hello.options, { deprecated: true, idempotency_level: 'NO_SIDE_EFFECTS', - uninterpreted_option: { + uninterpreted_option: [{ name: { name_part: 'foo', - is_extension: false, + is_extension: false, }, identifier_value: 'bar', positive_int_value: 9007199254740991, @@ -151,7 +151,7 @@ describe('Descriptor types', () => { double_value: 1.2345, string_value: 'foobar', aggregate_value: 'foobar' - }, + }], '(google.api.http)': { post: '/hello', body: '*',