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 6ced98176..311c4113e 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,762 b | 66,522 b | 16,383 b | -| Connect-ES | 4 | 168,204 b | 72,461 b | 16,895 b | -| Connect-ES | 8 | 193,517 b | 82,184 b | 17,500 b | -| Connect-ES | 16 | 227,156 b | 96,450 b | 18,264 b | +| Connect-ES | 1 | 152,706 b | 66,483 b | 16,386 b | +| Connect-ES | 4 | 168,148 b | 72,422 b | 16,890 b | +| Connect-ES | 8 | 193,461 b | 82,145 b | 17,461 b | +| Connect-ES | 16 | 227,100 b | 96,411 b | 18,214 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 62e6e6e3b..390216865 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 KiB for 1 RPCs -Connect-ES 16.5 KiB for 4 RPCs -Connect-ES 17.09 KiB for 8 RPCs -Connect-ES 17.84 KiB for 16 RPCs +Connect-ES 16 KiB for 1 RPCs +Connect-ES 16.49 KiB for 4 RPCs +Connect-ES 17.05 KiB for 8 RPCs +Connect-ES 17.79 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; }