diff --git a/integration/generic-metadata/hero.ts b/integration/generic-metadata/hero.ts index 8f4cf2943..f8ec71b31 100644 --- a/integration/generic-metadata/hero.ts +++ b/integration/generic-metadata/hero.ts @@ -1,8 +1,8 @@ /* eslint-disable */ +import { Metadata } from "@grpc/grpc-js"; import * as _m0 from "protobufjs/minimal"; import { Observable } from "rxjs"; import { map } from "rxjs/operators"; -import { Foo } from "./some-file"; export const protobufPackage = "hero"; @@ -287,9 +287,9 @@ export const Villain = { }; export interface HeroService { - FindOneHero(request: HeroById, metadata?: Foo): Promise; - FindOneVillain(request: VillainById, metadata?: Foo): Promise; - FindManyVillain(request: Observable, metadata?: Foo): Observable; + FindOneHero(request: HeroById, metadata?: Metadata): Promise; + FindOneVillain(request: VillainById, metadata?: Metadata): Promise; + FindManyVillain(request: Observable, metadata?: Metadata): Observable; } export const HeroServiceServiceName = "hero.HeroService"; @@ -303,21 +303,21 @@ export class HeroServiceClientImpl implements HeroService { this.FindOneVillain = this.FindOneVillain.bind(this); this.FindManyVillain = this.FindManyVillain.bind(this); } - FindOneHero(request: HeroById): Promise { + FindOneHero(request: HeroById, metadata?: Metadata): Promise { const data = HeroById.encode(request).finish(); - const promise = this.rpc.request(this.service, "FindOneHero", data); + const promise = this.rpc.request(this.service, "FindOneHero", data, metadata); return promise.then((data) => Hero.decode(_m0.Reader.create(data))); } - FindOneVillain(request: VillainById): Promise { + FindOneVillain(request: VillainById, metadata?: Metadata): Promise { const data = VillainById.encode(request).finish(); - const promise = this.rpc.request(this.service, "FindOneVillain", data); + const promise = this.rpc.request(this.service, "FindOneVillain", data, metadata); return promise.then((data) => Villain.decode(_m0.Reader.create(data))); } - FindManyVillain(request: Observable): Observable { + FindManyVillain(request: Observable, metadata?: Metadata): Observable { const data = request.pipe(map((request) => VillainById.encode(request).finish())); - const result = this.rpc.bidirectionalStreamingRequest(this.service, "FindManyVillain", data); + const result = this.rpc.bidirectionalStreamingRequest(this.service, "FindManyVillain", data, metadata); return result.pipe(map((data) => Villain.decode(_m0.Reader.create(data)))); } } @@ -355,10 +355,25 @@ export const HeroServiceDefinition = { } as const; interface Rpc { - request(service: string, method: string, data: Uint8Array): Promise; - clientStreamingRequest(service: string, method: string, data: Observable): Promise; - serverStreamingRequest(service: string, method: string, data: Uint8Array): Observable; - bidirectionalStreamingRequest(service: string, method: string, data: Observable): Observable; + request(service: string, method: string, data: Uint8Array, metadata?: Metadata): Promise; + clientStreamingRequest( + service: string, + method: string, + data: Observable, + metadata?: Metadata, + ): Promise; + serverStreamingRequest( + service: string, + method: string, + data: Uint8Array, + metadata?: Metadata, + ): Observable; + bidirectionalStreamingRequest( + service: string, + method: string, + data: Observable, + metadata?: Metadata, + ): Observable; } type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; diff --git a/integration/generic-metadata/parameters.txt b/integration/generic-metadata/parameters.txt index 187042c7d..fad3458b6 100644 --- a/integration/generic-metadata/parameters.txt +++ b/integration/generic-metadata/parameters.txt @@ -1 +1 @@ -metadataType=Foo@./some-file,outputServices=generic-definitions,outputServices=default \ No newline at end of file +metadataType=Foo@./some-file,outputServices=generic-definitions,outputServices=default,addGrpcMetadata=true \ No newline at end of file diff --git a/src/generate-services.ts b/src/generate-services.ts index 3d67342fa..4b5d3696f 100644 --- a/src/generate-services.ts +++ b/src/generate-services.ts @@ -68,8 +68,7 @@ export function generateService( params.push(code`metadata?: grpc.Metadata`); } else if (options.addGrpcMetadata) { const Metadata = imp("Metadata@@grpc/grpc-js"); - const q = options.addNestjsRestParameter ? "" : "?"; - params.push(code`metadata${q}: ${Metadata}`); + params.push(code`metadata?: ${Metadata}`); } else if (options.metadataType) { const Metadata = imp(options.metadataType); params.push(code`metadata?: ${Metadata}`); @@ -116,9 +115,11 @@ function generateRegularRpcMethod(ctx: Context, methodDesc: MethodDescriptorProt const params = [ ...(options.context ? [code`ctx: Context`] : []), code`request: ${inputType}`, + ...(options.addGrpcMetadata ? [code`metadata?: Metadata`] : []), ...(options.useAbortSignal ? [code`abortSignal?: AbortSignal`] : []), ]; const maybeCtx = options.context ? "ctx," : ""; + const maybeMetadata = options.addGrpcMetadata ? "metadata," : ""; const maybeAbortSignal = options.useAbortSignal ? "abortSignal || undefined," : ""; let errorHandler; @@ -193,6 +194,7 @@ function generateRegularRpcMethod(ctx: Context, methodDesc: MethodDescriptorProt this.service, "${methodDesc.name}", data, + ${maybeMetadata} ${maybeAbortSignal} ); return ${returnStatement}; @@ -418,6 +420,7 @@ export function generateRpcType(ctx: Context, hasStreamingMethods: boolean): Cod const { options } = ctx; const maybeContext = options.context ? "" : ""; const maybeContextParam = options.context ? "ctx: Context," : ""; + const maybeMetadataParam = options.addGrpcMetadata ? `metadata?: Metadata,` : ""; const maybeAbortSignalParam = options.useAbortSignal ? "abortSignal?: AbortSignal," : ""; const methods = [[code`request`, code`Uint8Array`, code`Promise`]]; const additionalMethods = []; @@ -456,6 +459,7 @@ export function generateRpcType(ctx: Context, hasStreamingMethods: boolean): Cod service: string, method: string, data: ${method[1]}, + ${maybeMetadataParam} ${maybeAbortSignalParam} ): ${method[2]};`); });