From 944909705413cebdfe0ae11301e8fd0e536c1edd Mon Sep 17 00:00:00 2001 From: Harry Chen Date: Sat, 20 Aug 2022 18:11:38 +0800 Subject: [PATCH] fix: grpc context typings (#2259) --- packages/grpc/src/interface.ts | 32 ++++++++++++++++++++++--- packages/grpc/src/provider/framework.ts | 12 ++++++---- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/packages/grpc/src/interface.ts b/packages/grpc/src/interface.ts index b0b02955aa14..2755a6e17e21 100644 --- a/packages/grpc/src/interface.ts +++ b/packages/grpc/src/interface.ts @@ -4,12 +4,32 @@ import { IMidwayContext, NextFunction as BaseNextFunction } from '@midwayjs/core'; -import { Server, ServerCredentials, Metadata, ServerDuplexStream, ClientWritableStream, ClientDuplexStream, ClientReadableStream, ClientUnaryCall, ChannelOptions, ClientOptions } from '@grpc/grpc-js'; +import { + Server, + ServerCredentials, + Metadata, + ClientWritableStream, + ClientDuplexStream, + ClientReadableStream, + ClientUnaryCall, + ChannelOptions, + ClientOptions, + ServerUnaryCall, + ServerReadableStream, + ServerWritableStream, + ServerDuplexStream, +} from '@grpc/grpc-js'; + +type GrpcHandleCall = + Partial & + ServerReadableStream & + ServerWritableStream & + ServerDuplexStream>; -export interface Context extends IMidwayContext> { - metadata: Metadata; +export interface Context extends IMidwayContext> { method: string; } + export type IMidwayGRPCApplication = IMidwayApplication; export type Application = IMidwayGRPCApplication; @@ -73,23 +93,29 @@ export interface DefaultConfig extends IConfigurationOptions { export interface IClientUnaryService { sendMessage(reqData: reqType, handler?: (call: ClientUnaryCall) => void): Promise; + sendMessageWithCallback(content: reqType, callback): ClientUnaryCall; } export interface IClientReadableStreamService { sendMessage(reqData: reqType): Promise; + getCall(): ClientReadableStream; } export interface IClientWritableStreamService { sendMessage(reqData: reqType): IClientWritableStreamService; + end(): Promise; + getCall(): ClientWritableStream; } export interface IClientDuplexStreamService { sendMessage(reqData: reqType): Promise; + getCall(): ClientDuplexStream; + end(): void; } diff --git a/packages/grpc/src/provider/framework.ts b/packages/grpc/src/provider/framework.ts index 8bca70fc072f..533a747e24a9 100644 --- a/packages/grpc/src/provider/framework.ts +++ b/packages/grpc/src/provider/framework.ts @@ -2,8 +2,10 @@ import { sendUnaryData, Server, ServerCredentials, - ServerUnaryCall, setLogger, + UntypedServiceImplementation, + UntypedHandleCall, + ServerUnaryCall, } from '@grpc/grpc-js'; import { BaseFramework, @@ -113,7 +115,7 @@ export class MidwayGRPCFramework extends BaseFramework< classMetadata.serviceName || Utils.pascalCase(providerName); if (serviceClassDefinition.has(classMetadata?.package)) { - const serviceInstance = {}; + const serviceInstance = {} as UntypedServiceImplementation; const serviceDefinition: any = serviceClassDefinition.get( classMetadata.package )[`${classMetadata?.package}.${serviceName}`]; @@ -126,11 +128,11 @@ export class MidwayGRPCFramework extends BaseFramework< for (const method in serviceDefinition) { serviceInstance[method] = async ( - call: ServerUnaryCall, + call: Parameters[0], callback?: sendUnaryData ) => { // merge ctx and call - const ctx = call as any; + const ctx = call as Context; ctx.method = method; this.app.createAnonymousContext(ctx); @@ -178,7 +180,7 @@ export class MidwayGRPCFramework extends BaseFramework< service, ctx, callback, - data: call.request, + data: (call as ServerUnaryCall).request, grpcMethodData, }); }