diff --git a/packages/connect-conformance/src/callback-client.ts b/packages/connect-conformance/src/callback-client.ts index 25c3066ee..32aed77e8 100644 --- a/packages/connect-conformance/src/callback-client.ts +++ b/packages/connect-conformance/src/callback-client.ts @@ -23,6 +23,7 @@ import { ServerStreamRequest, UnimplementedRequest, IdempotentUnaryRequest, + ConformancePayload, } from "./gen/connectrpc/conformance/v1/service_pb.js"; import { convertToProtoError, @@ -37,6 +38,8 @@ import { ConformanceService } from "./gen/connectrpc/conformance/v1/service_conn type ConformanceClient = CallbackClient; +const emptyPayload = new ConformancePayload(); + export function invokeWithCallbackClient( transport: Transport, req: ClientCompatRequest, @@ -82,7 +85,7 @@ async function unary( if (err !== undefined) { setClientErrorResult(result, err); } else { - result.payloads.push(response.payload!); + result.payloads.push(response.payload ?? emptyPayload); } resolve(result); }, @@ -125,7 +128,7 @@ async function serverStream( const clientCancelFn = client.serverStream( getSingleRequestMessage(compatRequest, ServerStreamRequest), (response) => { - result.payloads.push(response.payload!); + result.payloads.push(response.payload ?? emptyPayload); if (result.payloads.length === cancelTiming.afterNumResponses) { clientCancelled = true; clientCancelFn(); diff --git a/packages/connect-conformance/src/promise-client.ts b/packages/connect-conformance/src/promise-client.ts index 81f5a280d..7c72afaed 100644 --- a/packages/connect-conformance/src/promise-client.ts +++ b/packages/connect-conformance/src/promise-client.ts @@ -21,6 +21,7 @@ import { import { BidiStreamRequest, ClientStreamRequest, + ConformancePayload, IdempotentUnaryRequest, ServerStreamRequest, UnaryRequest, @@ -41,6 +42,8 @@ import { StreamType } from "./gen/connectrpc/conformance/v1/config_pb.js"; type ConformanceClient = PromiseClient; +const emptyPayload = new ConformancePayload(); + export function invokeWithPromiseClient( transport: Transport, compatRequest: ClientCompatRequest, @@ -93,7 +96,7 @@ async function unary( result.responseTrailers = convertToProtoHeaders(trailers); }, }); - result.payloads.push(response.payload!); + result.payloads.push(response.payload ?? emptyPayload); } catch (e) { setClientErrorResult(result, e); } @@ -125,7 +128,7 @@ async function serverStream( controller.abort(); } for await (const msg of res) { - result.payloads.push(msg.payload!); + result.payloads.push(msg.payload ?? emptyPayload); if (result.payloads.length === cancelTiming.afterNumResponses) { controller.abort(); } @@ -172,7 +175,7 @@ async function clientStream( }, }, ); - result.payloads.push(response.payload!); + result.payloads.push(response.payload ?? emptyPayload); } catch (e) { setClientErrorResult(result, e); } @@ -210,7 +213,7 @@ async function bidiStream( if (next.done === true) { continue; } - result.payloads.push(next.value.payload!); + result.payloads.push(next.value.payload ?? emptyPayload); if (result.payloads.length === cancelTiming.afterNumResponses) { controller.abort(); } @@ -234,7 +237,7 @@ async function bidiStream( if (next.done === true) { break; } - result.payloads.push(next.value.payload!); + result.payloads.push(next.value.payload ?? emptyPayload); if (result.payloads.length === cancelTiming.afterNumResponses) { controller.abort(); } diff --git a/packages/connect-web-bench/README.md b/packages/connect-web-bench/README.md index e340f0cd1..ecc96388d 100644 --- a/packages/connect-web-bench/README.md +++ b/packages/connect-web-bench/README.md @@ -15,10 +15,10 @@ usually do. We repeat this for an increasing number of RPCs. | code generator | RPCs | bundle size | minified | compressed | | -------------- | ---: | ----------: | --------: | ---------: | -| Connect-ES | 1 | 152,759 b | 66,533 b | 16,438 b | -| Connect-ES | 4 | 168,201 b | 72,473 b | 16,896 b | -| Connect-ES | 8 | 193,514 b | 82,198 b | 17,477 b | -| Connect-ES | 16 | 227,153 b | 96,461 b | 18,226 b | +| Connect-ES | 1 | 152,703 b | 66,494 b | 16,400 b | +| Connect-ES | 4 | 168,145 b | 72,434 b | 16,865 b | +| Connect-ES | 8 | 193,458 b | 82,159 b | 17,484 b | +| Connect-ES | 16 | 227,097 b | 96,422 b | 18,224 b | | gRPC-Web | 1 | 876,563 b | 548,495 b | 52,300 b | | gRPC-Web | 4 | 928,964 b | 580,477 b | 54,673 b | | gRPC-Web | 8 | 1,004,833 b | 628,223 b | 57,118 b | diff --git a/packages/connect-web-bench/chart.svg b/packages/connect-web-bench/chart.svg index 7b6c13018..4e6f0cdd4 100644 --- a/packages/connect-web-bench/chart.svg +++ b/packages/connect-web-bench/chart.svg @@ -42,13 +42,13 @@ 0 KiB - + Connect-ES -Connect-ES 16.05 KiB for 1 RPCs -Connect-ES 16.5 KiB for 4 RPCs -Connect-ES 17.07 KiB for 8 RPCs -Connect-ES 17.8 KiB for 16 RPCs +Connect-ES 16.02 KiB for 1 RPCs +Connect-ES 16.47 KiB for 4 RPCs +Connect-ES 17.07 KiB for 8 RPCs +Connect-ES 17.8 KiB for 16 RPCs diff --git a/packages/connect/src/protocol-connect/error-json.ts b/packages/connect/src/protocol-connect/error-json.ts index 7e5930f33..425bebb8f 100644 --- a/packages/connect/src/protocol-connect/error-json.ts +++ b/packages/connect/src/protocol-connect/error-json.ts @@ -61,8 +61,7 @@ export function errorFromJson( typeof detail != "object" || Array.isArray(detail) || typeof detail.type != "string" || - typeof detail.value != "string" || - ("debug" in detail && typeof detail.debug != "object") + typeof detail.value != "string" ) { throw fallback; }