diff --git a/.changeset/kind-ghosts-win.md b/.changeset/kind-ghosts-win.md new file mode 100644 index 0000000000..7c71ff82a1 --- /dev/null +++ b/.changeset/kind-ghosts-win.md @@ -0,0 +1,5 @@ +--- +'@tanstack/start-client-core': patch +--- + +compact private frame decoder result keys diff --git a/packages/start-client-core/src/client-rpc/frame-decoder.ts b/packages/start-client-core/src/client-rpc/frame-decoder.ts index 9834b10a1b..6820afcf81 100644 --- a/packages/start-client-core/src/client-rpc/frame-decoder.ts +++ b/packages/start-client-core/src/client-rpc/frame-decoder.ts @@ -25,9 +25,9 @@ const MAX_FRAMES = 100_000 // Limit total frames to prevent CPU DoS */ export interface FrameDecoderResult { /** Gets or creates a raw stream by ID (for use by deserialize plugin) */ - getOrCreateStream: (id: number) => ReadableStream + getStream: (id: number) => ReadableStream /** Stream of JSON strings (NDJSON lines) */ - jsonChunks: ReadableStream + chunks: ReadableStream } /** @@ -404,5 +404,5 @@ export function createFrameDecoder( } })() - return { getOrCreateStream, jsonChunks } + return { getStream: getOrCreateStream, chunks: jsonChunks } } diff --git a/packages/start-client-core/src/client-rpc/serverFnFetcher.ts b/packages/start-client-core/src/client-rpc/serverFnFetcher.ts index 5c467bcdf0..2534b6bb93 100644 --- a/packages/start-client-core/src/client-rpc/serverFnFetcher.ts +++ b/packages/start-client-core/src/client-rpc/serverFnFetcher.ts @@ -273,18 +273,15 @@ async function getResponse(fn: () => Promise) { throw new Error('No response body for framed response') } - const { getOrCreateStream, jsonChunks } = createFrameDecoder( - response.body, - ) + const { getStream, chunks } = createFrameDecoder(response.body) // Create deserialize plugin that wires up the raw streams - const rawStreamPlugin = - createRawStreamDeserializePlugin(getOrCreateStream) + const rawStreamPlugin = createRawStreamDeserializePlugin(getStream) const plugins = [rawStreamPlugin, ...(serovalPlugins || [])] const refs = new Map() result = await processFramedResponse({ - jsonStream: jsonChunks, + jsonStream: chunks, onMessage: (msg: any) => fromCrossJSON(msg, { refs, plugins }), onError(msg, error) { console.error(msg, error) diff --git a/packages/start-client-core/tests/frame-decoder.test.ts b/packages/start-client-core/tests/frame-decoder.test.ts index 3a05611392..375024bff7 100644 --- a/packages/start-client-core/tests/frame-decoder.test.ts +++ b/packages/start-client-core/tests/frame-decoder.test.ts @@ -50,7 +50,7 @@ describe('frame-decoder', () => { }, }) - const { jsonChunks } = createFrameDecoder(input) + const { chunks: jsonChunks } = createFrameDecoder(input) const reader = jsonChunks.getReader() await expect(reader.read()).rejects.toThrow('Unknown frame type') @@ -65,7 +65,7 @@ describe('frame-decoder', () => { }, }) - const { jsonChunks } = createFrameDecoder(input) + const { chunks: jsonChunks } = createFrameDecoder(input) const reader = jsonChunks.getReader() await expect(reader.read()).rejects.toThrow('Invalid raw frame streamId') @@ -84,7 +84,7 @@ describe('frame-decoder', () => { }, }) - const { jsonChunks } = createFrameDecoder(input) + const { chunks: jsonChunks } = createFrameDecoder(input) const reader = jsonChunks.getReader() await expect(reader.read()).rejects.toThrow('Invalid JSON frame streamId') @@ -105,7 +105,7 @@ describe('frame-decoder', () => { }, }) - const { jsonChunks } = createFrameDecoder(input) + const { chunks: jsonChunks } = createFrameDecoder(input) const reader = jsonChunks.getReader() await expect(reader.read()).rejects.toThrow('Frame payload too large') @@ -125,7 +125,7 @@ describe('frame-decoder', () => { }, }) - const { jsonChunks } = createFrameDecoder(input) + const { chunks: jsonChunks } = createFrameDecoder(input) const reader = jsonChunks.getReader() await expect(reader.read()).rejects.toThrow('Incomplete frame') @@ -140,7 +140,7 @@ describe('frame-decoder', () => { }, }) - const { jsonChunks } = createFrameDecoder(input) + const { chunks: jsonChunks } = createFrameDecoder(input) const reader = jsonChunks.getReader() await reader.cancel() @@ -169,7 +169,7 @@ describe('frame-decoder', () => { }, }) - const { jsonChunks } = createFrameDecoder(input) + const { chunks: jsonChunks } = createFrameDecoder(input) const reader = jsonChunks.getReader() await expect(reader.read()).rejects.toThrow('Too many raw streams') @@ -186,7 +186,7 @@ describe('frame-decoder', () => { }, }) - const { jsonChunks } = createFrameDecoder(input) + const { chunks: jsonChunks } = createFrameDecoder(input) const reader = jsonChunks.getReader() await expect(reader.read()).rejects.toThrow('buffer exceeded') @@ -207,7 +207,7 @@ describe('frame-decoder', () => { }, }) - const { jsonChunks } = createFrameDecoder(input) + const { chunks: jsonChunks } = createFrameDecoder(input) const reader = jsonChunks.getReader() const chunks: Array = [] @@ -240,7 +240,8 @@ describe('frame-decoder', () => { }, }) - const { jsonChunks, getOrCreateStream } = createFrameDecoder(input) + const { chunks: jsonChunks, getStream: getOrCreateStream } = + createFrameDecoder(input) // Pre-create the stream before consuming const stream5 = getOrCreateStream(5) @@ -276,7 +277,7 @@ describe('frame-decoder', () => { }, }) - const { jsonChunks } = createFrameDecoder(input) + const { chunks: jsonChunks } = createFrameDecoder(input) const reader = jsonChunks.getReader() const chunks: Array = [] @@ -301,7 +302,7 @@ describe('frame-decoder', () => { }, }) - const { jsonChunks } = createFrameDecoder(input) + const { chunks: jsonChunks } = createFrameDecoder(input) const reader = jsonChunks.getReader() const { value } = await reader.read() @@ -326,7 +327,7 @@ describe('frame-decoder', () => { }, }) - const { jsonChunks } = createFrameDecoder(input) + const { chunks: jsonChunks } = createFrameDecoder(input) const reader = jsonChunks.getReader() const { value } = await reader.read() @@ -353,7 +354,7 @@ describe('frame-decoder', () => { }, }) - const { jsonChunks } = createFrameDecoder(input) + const { chunks: jsonChunks } = createFrameDecoder(input) const reader = jsonChunks.getReader() const { value } = await reader.read() @@ -387,7 +388,8 @@ describe('frame-decoder', () => { }, }) - const { getOrCreateStream, jsonChunks } = createFrameDecoder(input) + const { getStream: getOrCreateStream, chunks: jsonChunks } = + createFrameDecoder(input) // Pre-create streams before consuming const stream1 = getOrCreateStream(1) @@ -428,7 +430,8 @@ describe('frame-decoder', () => { }, }) - const { getOrCreateStream, jsonChunks } = createFrameDecoder(input) + const { getStream: getOrCreateStream, chunks: jsonChunks } = + createFrameDecoder(input) // Pre-create stream 3 const stream3 = getOrCreateStream(3) @@ -480,7 +483,8 @@ describe('frame-decoder', () => { }, }) - const { getOrCreateStream, jsonChunks } = createFrameDecoder(input) + const { getStream: getOrCreateStream, chunks: jsonChunks } = + createFrameDecoder(input) // First, fully consume JSON stream (this processes all frames) const jsonReader = jsonChunks.getReader() @@ -536,7 +540,8 @@ describe('frame-decoder', () => { }, }) - const { getOrCreateStream, jsonChunks } = createFrameDecoder(input) + const { getStream: getOrCreateStream, chunks: jsonChunks } = + createFrameDecoder(input) // Drain JSON (processes all frames) const jsonReader = jsonChunks.getReader() @@ -588,7 +593,8 @@ describe('frame-decoder', () => { }, }) - const { getOrCreateStream, jsonChunks } = createFrameDecoder(input) + const { getStream: getOrCreateStream, chunks: jsonChunks } = + createFrameDecoder(input) const stream11 = getOrCreateStream(11) const jsonReader = jsonChunks.getReader()