From 076aeccfdc88fbf24e8c8f65741803e231a41a00 Mon Sep 17 00:00:00 2001 From: Sahebjot singh Date: Wed, 21 Apr 2021 09:01:42 +0530 Subject: [PATCH 1/3] grpc-js: stricter function check than instanceof instanceof does not work in vm context --- packages/grpc-js/src/client.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/grpc-js/src/client.ts b/packages/grpc-js/src/client.ts index 5f78ffe59..2f995e82b 100644 --- a/packages/grpc-js/src/client.ts +++ b/packages/grpc-js/src/client.ts @@ -198,9 +198,9 @@ export class Client { options: CallOptions; callback: UnaryCallback; } { - if (arg1 instanceof Function) { + if (Object.prototype.toString.call(arg1) === '[object Function]') { return { metadata: new Metadata(), options: {}, callback: arg1 }; - } else if (arg2 instanceof Function) { + } else if (Object.prototype.toString.call(arg2) === '[object Function]') { if (arg1 instanceof Metadata) { return { metadata: arg1, options: {}, callback: arg2 }; } else { @@ -211,7 +211,7 @@ export class Client { !( arg1 instanceof Metadata && arg2 instanceof Object && - arg3 instanceof Function + Object.prototype.toString.call(arg3) === '[object Function]' ) ) { throw new Error('Incorrect arguments passed'); From 7a8cd5a4bde13cde54b41847607fa6c83a4c906d Mon Sep 17 00:00:00 2001 From: zereraz Date: Sat, 24 Apr 2021 14:00:05 +0530 Subject: [PATCH 2/3] grpc-js: Use helper isFunction --- packages/grpc-js/src/client.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/grpc-js/src/client.ts b/packages/grpc-js/src/client.ts index 2f995e82b..c1db50788 100644 --- a/packages/grpc-js/src/client.ts +++ b/packages/grpc-js/src/client.ts @@ -55,6 +55,10 @@ const INTERCEPTOR_SYMBOL = Symbol(); const INTERCEPTOR_PROVIDER_SYMBOL = Symbol(); const CALL_INVOCATION_TRANSFORMER_SYMBOL = Symbol(); +function isFunction(arg: Metadata | CallOptions | UnaryCallback): boolean { + return Object.prototype.toString.call(arg) === '[object Function]' +} + export interface UnaryCallback { (err: ServiceError | null, value?: ResponseType): void; } @@ -198,9 +202,9 @@ export class Client { options: CallOptions; callback: UnaryCallback; } { - if (Object.prototype.toString.call(arg1) === '[object Function]') { + if (isFunction(arg1)) { return { metadata: new Metadata(), options: {}, callback: arg1 }; - } else if (Object.prototype.toString.call(arg2) === '[object Function]') { + } else if (isFunction(arg2)) { if (arg1 instanceof Metadata) { return { metadata: arg1, options: {}, callback: arg2 }; } else { @@ -211,7 +215,7 @@ export class Client { !( arg1 instanceof Metadata && arg2 instanceof Object && - Object.prototype.toString.call(arg3) === '[object Function]' + isFunction(arg3) ) ) { throw new Error('Incorrect arguments passed'); @@ -671,3 +675,4 @@ export class Client { return stream; } } + From 923b44bb1c22bf4c4a7605eebb3f70a8df65ef98 Mon Sep 17 00:00:00 2001 From: zereraz Date: Wed, 28 Apr 2021 00:18:23 +0530 Subject: [PATCH 3/3] grpc-js: Add type predicate to fix errors for isFunction --- packages/grpc-js/src/client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/grpc-js/src/client.ts b/packages/grpc-js/src/client.ts index c1db50788..850e839cc 100644 --- a/packages/grpc-js/src/client.ts +++ b/packages/grpc-js/src/client.ts @@ -55,7 +55,7 @@ const INTERCEPTOR_SYMBOL = Symbol(); const INTERCEPTOR_PROVIDER_SYMBOL = Symbol(); const CALL_INVOCATION_TRANSFORMER_SYMBOL = Symbol(); -function isFunction(arg: Metadata | CallOptions | UnaryCallback): boolean { +function isFunction(arg: Metadata | CallOptions | UnaryCallback | undefined): arg is UnaryCallback{ return Object.prototype.toString.call(arg) === '[object Function]' }