fork of hey-api/openapi-ts because I need some additional things
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #3201 from hey-api/copilot/fix-empty-response-json-issue

Fix JSON parsing error on empty response bodies without Content-Length header

authored by

Lubos and committed by
GitHub
1a98f238 6b337ae8

+1450 -177
+5
.changeset/tame-dolives-brake.md
··· 1 + --- 2 + "@hey-api/openapi-ts": patch 3 + --- 4 + 5 + **plugin(@hey-api/client-next)**: fix: JSON parsing error on empty response bodies without Content-Length header
+5
.changeset/tame-olives-brake.md
··· 1 + --- 2 + "@hey-api/openapi-ts": patch 3 + --- 4 + 5 + **plugin(@hey-api/client-fetch)**: fix: JSON parsing error on empty response bodies without Content-Length header
+5
.changeset/tame-solives-brake.md
··· 1 + --- 2 + "@hey-api/openapi-ts": patch 3 + --- 4 + 5 + **plugin(@hey-api/client-ky)**: fix: JSON parsing error on empty response bodies without Content-Length header
+7 -1
examples/openapi-ts-fastify/src/client/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
examples/openapi-ts-fetch/src/client/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
examples/openapi-ts-ky/src/client/client/client.gen.ts
··· 251 251 case 'arrayBuffer': 252 252 case 'blob': 253 253 case 'formData': 254 - case 'json': 255 254 case 'text': 256 255 data = await response[parseAs](); 257 256 break; 257 + case 'json': { 258 + // Some servers return 200 with no Content-Length and empty body. 259 + // response.json() would throw; read as text and parse if non-empty. 260 + const text = await response.text(); 261 + data = text ? JSON.parse(text) : {}; 262 + break; 263 + } 258 264 case 'stream': 259 265 return opts.responseStyle === 'data' 260 266 ? response.body
+7 -1
examples/openapi-ts-next/src/client/client/client.gen.ts
··· 144 144 case 'arrayBuffer': 145 145 case 'blob': 146 146 case 'formData': 147 - case 'json': 148 147 case 'text': 149 148 data = await response[parseAs](); 150 149 break; 150 + case 'json': { 151 + // Some servers return 200 with no Content-Length and empty body. 152 + // response.json() would throw; read as text and parse if non-empty. 153 + const text = await response.text(); 154 + data = text ? JSON.parse(text) : {}; 155 + break; 156 + } 151 157 case 'stream': 152 158 return { 153 159 data: response.body,
+7 -1
examples/openapi-ts-openai/src/client/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
examples/openapi-ts-pinia-colada/src/client/client/client.gen.ts
··· 164 164 case 'arrayBuffer': 165 165 case 'blob': 166 166 case 'formData': 167 - case 'json': 168 167 case 'text': 169 168 data = await response[parseAs]() 170 169 break 170 + case 'json': { 171 + // Some servers return 200 with no Content-Length and empty body. 172 + // response.json() would throw; read as text and parse if non-empty. 173 + const text = await response.text() 174 + data = text ? JSON.parse(text) : {} 175 + break 176 + } 171 177 case 'stream': 172 178 return opts.responseStyle === 'data' 173 179 ? response.body
+7 -1
examples/openapi-ts-tanstack-react-query/src/client/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
examples/openapi-ts-tanstack-svelte-query/src/client/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
examples/openapi-ts-tanstack-vue-query/src/client/client/client.gen.ts
··· 164 164 case 'arrayBuffer': 165 165 case 'blob': 166 166 case 'formData': 167 - case 'json': 168 167 case 'text': 169 168 data = await response[parseAs]() 170 169 break 170 + case 'json': { 171 + // Some servers return 200 with no Content-Length and empty body. 172 + // response.json() would throw; read as text and parse if non-empty. 173 + const text = await response.text() 174 + data = text ? JSON.parse(text) : {} 175 + break 176 + } 171 177 case 'stream': 172 178 return opts.responseStyle === 'data' 173 179 ? response.body
+64 -1
packages/custom-client/src/__tests__/client.test.ts
··· 1 - import { describe, expect, it } from 'vitest'; 1 + import { describe, expect, it, vi } from 'vitest'; 2 2 3 3 import { createClient } from '../client'; 4 4 ··· 48 48 expect(client.buildUrl(options)).toBe(url); 49 49 }); 50 50 }); 51 + 52 + describe('zero-length body handling', () => { 53 + const client = createClient({ baseUrl: 'https://example.com' }); 54 + 55 + it('returns empty object for zero-length JSON response', async () => { 56 + const mockResponse = new Response(null, { 57 + headers: { 58 + 'Content-Length': '0', 59 + 'Content-Type': 'application/json', 60 + }, 61 + status: 200, 62 + }); 63 + 64 + const mockFetch = vi.fn().mockResolvedValue(mockResponse); 65 + 66 + const result = await client.request({ 67 + fetch: mockFetch, 68 + method: 'GET', 69 + url: '/test', 70 + }); 71 + 72 + expect(result.data).toEqual({}); 73 + }); 74 + 75 + it('returns empty object for empty JSON response without Content-Length header (status 200)', async () => { 76 + // Simulates a server returning an empty body with status 200 and no Content-Length header 77 + // This is the scenario described in the issue where response.json() throws 78 + const mockResponse = new Response('', { 79 + headers: { 80 + 'Content-Type': 'application/json', 81 + }, 82 + status: 200, 83 + }); 84 + 85 + const mockFetch = vi.fn().mockResolvedValue(mockResponse); 86 + 87 + const result = await client.request({ 88 + fetch: mockFetch, 89 + method: 'GET', 90 + url: '/test', 91 + }); 92 + 93 + expect(result.data).toEqual({}); 94 + }); 95 + 96 + it('returns empty object for empty response without Content-Length header and no Content-Type (defaults to JSON)', async () => { 97 + // Tests the auto-detection behavior when no Content-Type is provided 98 + const mockResponse = new Response('', { 99 + status: 200, 100 + }); 101 + 102 + const mockFetch = vi.fn().mockResolvedValue(mockResponse); 103 + 104 + const result = await client.request({ 105 + fetch: mockFetch, 106 + method: 'GET', 107 + url: '/test', 108 + }); 109 + 110 + // When parseAs is 'auto' and no Content-Type header exists, it should handle empty body gracefully 111 + expect(result.data).toBeDefined(); 112 + }); 113 + });
+7 -1
packages/custom-client/src/client.ts
··· 111 111 case 'arrayBuffer': 112 112 case 'blob': 113 113 case 'formData': 114 - case 'json': 115 114 case 'text': 116 115 data = await response[parseAs](); 117 116 break; 117 + case 'json': { 118 + // Some servers return 200 with no Content-Length and empty body. 119 + // response.json() would throw; read as text and parse if non-empty. 120 + const text = await response.text(); 121 + data = text ? JSON.parse(text) : {}; 122 + break; 123 + } 118 124 case 'stream': 119 125 return { 120 126 data: response.body,
+7 -1
packages/openapi-ts-tests/__snapshots__/plugins/@tanstack/meta/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/body-response-text-plain/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/form-data/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/default/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/instance/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/sdk/throwOnError/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-valibot/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/transformers/type-format-zod/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/asClass/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@pinia/colada/fetch/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/asClass/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/fetch/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/asClass/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/fetch/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/react-query/name-builder/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/asClass/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/fetch/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/solid-query/name-builder/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/asClass/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/fetch/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/svelte-query/name-builder/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/asClass/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/fetch/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/plugins/@tanstack/vue-query/name-builder/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/schema-unknown/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-api-key/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-basic/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-false/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/security-oauth2/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-base-path/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers-host/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/servers/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/2.0.x/transforms-read-write/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/body-binary-format/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/body-response-text-plain/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/internal-name-conflict/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/parameter-explode-false/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/default/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/instance/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/sdk/throwOnError/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-valibot/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/transformers/type-format-zod/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/asClass/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@pinia/colada/fetch/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/asClass/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/fetch/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/angular-query-experimental/name-builder/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/asClass/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/fetch/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/react-query/name-builder/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/asClass/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/fetch/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/solid-query/name-builder/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/asClass/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/fetch/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/svelte-query/name-builder/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/asClass/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/fetch/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/plugins/@tanstack/vue-query/name-builder/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-api-key/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-false/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-http-bearer/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-oauth2/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/security-open-id-connect/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/servers/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-all-of/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-any-of-null/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-array/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transformers-recursive/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.0.x/transforms-read-write/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/body-response-text-plain/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-false/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-number/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-strict/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/base-url-string/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/clean-false/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/default/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/import-file-extension-ts/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-optional/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/sdk-client-required/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/tsconfig-node16-sdk/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-fetch/tsconfig-nodenext-sdk/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ky/base-url-false/client/client.gen.ts
··· 251 251 case 'arrayBuffer': 252 252 case 'blob': 253 253 case 'formData': 254 - case 'json': 255 254 case 'text': 256 255 data = await response[parseAs](); 257 256 break; 257 + case 'json': { 258 + // Some servers return 200 with no Content-Length and empty body. 259 + // response.json() would throw; read as text and parse if non-empty. 260 + const text = await response.text(); 261 + data = text ? JSON.parse(text) : {}; 262 + break; 263 + } 258 264 case 'stream': 259 265 return opts.responseStyle === 'data' 260 266 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ky/base-url-number/client/client.gen.ts
··· 251 251 case 'arrayBuffer': 252 252 case 'blob': 253 253 case 'formData': 254 - case 'json': 255 254 case 'text': 256 255 data = await response[parseAs](); 257 256 break; 257 + case 'json': { 258 + // Some servers return 200 with no Content-Length and empty body. 259 + // response.json() would throw; read as text and parse if non-empty. 260 + const text = await response.text(); 261 + data = text ? JSON.parse(text) : {}; 262 + break; 263 + } 258 264 case 'stream': 259 265 return opts.responseStyle === 'data' 260 266 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ky/base-url-strict/client/client.gen.ts
··· 251 251 case 'arrayBuffer': 252 252 case 'blob': 253 253 case 'formData': 254 - case 'json': 255 254 case 'text': 256 255 data = await response[parseAs](); 257 256 break; 257 + case 'json': { 258 + // Some servers return 200 with no Content-Length and empty body. 259 + // response.json() would throw; read as text and parse if non-empty. 260 + const text = await response.text(); 261 + data = text ? JSON.parse(text) : {}; 262 + break; 263 + } 258 264 case 'stream': 259 265 return opts.responseStyle === 'data' 260 266 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ky/base-url-string/client/client.gen.ts
··· 251 251 case 'arrayBuffer': 252 252 case 'blob': 253 253 case 'formData': 254 - case 'json': 255 254 case 'text': 256 255 data = await response[parseAs](); 257 256 break; 257 + case 'json': { 258 + // Some servers return 200 with no Content-Length and empty body. 259 + // response.json() would throw; read as text and parse if non-empty. 260 + const text = await response.text(); 261 + data = text ? JSON.parse(text) : {}; 262 + break; 263 + } 258 264 case 'stream': 259 265 return opts.responseStyle === 'data' 260 266 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ky/clean-false/client/client.gen.ts
··· 251 251 case 'arrayBuffer': 252 252 case 'blob': 253 253 case 'formData': 254 - case 'json': 255 254 case 'text': 256 255 data = await response[parseAs](); 257 256 break; 257 + case 'json': { 258 + // Some servers return 200 with no Content-Length and empty body. 259 + // response.json() would throw; read as text and parse if non-empty. 260 + const text = await response.text(); 261 + data = text ? JSON.parse(text) : {}; 262 + break; 263 + } 258 264 case 'stream': 259 265 return opts.responseStyle === 'data' 260 266 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ky/default/client/client.gen.ts
··· 251 251 case 'arrayBuffer': 252 252 case 'blob': 253 253 case 'formData': 254 - case 'json': 255 254 case 'text': 256 255 data = await response[parseAs](); 257 256 break; 257 + case 'json': { 258 + // Some servers return 200 with no Content-Length and empty body. 259 + // response.json() would throw; read as text and parse if non-empty. 260 + const text = await response.text(); 261 + data = text ? JSON.parse(text) : {}; 262 + break; 263 + } 258 264 case 'stream': 259 265 return opts.responseStyle === 'data' 260 266 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ky/import-file-extension-ts/client/client.gen.ts
··· 251 251 case 'arrayBuffer': 252 252 case 'blob': 253 253 case 'formData': 254 - case 'json': 255 254 case 'text': 256 255 data = await response[parseAs](); 257 256 break; 257 + case 'json': { 258 + // Some servers return 200 with no Content-Length and empty body. 259 + // response.json() would throw; read as text and parse if non-empty. 260 + const text = await response.text(); 261 + data = text ? JSON.parse(text) : {}; 262 + break; 263 + } 258 264 case 'stream': 259 265 return opts.responseStyle === 'data' 260 266 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ky/sdk-client-optional/client/client.gen.ts
··· 251 251 case 'arrayBuffer': 252 252 case 'blob': 253 253 case 'formData': 254 - case 'json': 255 254 case 'text': 256 255 data = await response[parseAs](); 257 256 break; 257 + case 'json': { 258 + // Some servers return 200 with no Content-Length and empty body. 259 + // response.json() would throw; read as text and parse if non-empty. 260 + const text = await response.text(); 261 + data = text ? JSON.parse(text) : {}; 262 + break; 263 + } 258 264 case 'stream': 259 265 return opts.responseStyle === 'data' 260 266 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ky/sdk-client-required/client/client.gen.ts
··· 251 251 case 'arrayBuffer': 252 252 case 'blob': 253 253 case 'formData': 254 - case 'json': 255 254 case 'text': 256 255 data = await response[parseAs](); 257 256 break; 257 + case 'json': { 258 + // Some servers return 200 with no Content-Length and empty body. 259 + // response.json() would throw; read as text and parse if non-empty. 260 + const text = await response.text(); 261 + data = text ? JSON.parse(text) : {}; 262 + break; 263 + } 258 264 case 'stream': 259 265 return opts.responseStyle === 'data' 260 266 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ky/tsconfig-node16-sdk/client/client.gen.ts
··· 251 251 case 'arrayBuffer': 252 252 case 'blob': 253 253 case 'formData': 254 - case 'json': 255 254 case 'text': 256 255 data = await response[parseAs](); 257 256 break; 257 + case 'json': { 258 + // Some servers return 200 with no Content-Length and empty body. 259 + // response.json() would throw; read as text and parse if non-empty. 260 + const text = await response.text(); 261 + data = text ? JSON.parse(text) : {}; 262 + break; 263 + } 258 264 case 'stream': 259 265 return opts.responseStyle === 'data' 260 266 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ky/tsconfig-nodenext-sdk/client/client.gen.ts
··· 251 251 case 'arrayBuffer': 252 252 case 'blob': 253 253 case 'formData': 254 - case 'json': 255 254 case 'text': 256 255 data = await response[parseAs](); 257 256 break; 257 + case 'json': { 258 + // Some servers return 200 with no Content-Length and empty body. 259 + // response.json() would throw; read as text and parse if non-empty. 260 + const text = await response.text(); 261 + data = text ? JSON.parse(text) : {}; 262 + break; 263 + } 258 264 case 'stream': 259 265 return opts.responseStyle === 'data' 260 266 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-false/client/client.gen.ts
··· 144 144 case 'arrayBuffer': 145 145 case 'blob': 146 146 case 'formData': 147 - case 'json': 148 147 case 'text': 149 148 data = await response[parseAs](); 150 149 break; 150 + case 'json': { 151 + // Some servers return 200 with no Content-Length and empty body. 152 + // response.json() would throw; read as text and parse if non-empty. 153 + const text = await response.text(); 154 + data = text ? JSON.parse(text) : {}; 155 + break; 156 + } 151 157 case 'stream': 152 158 return { 153 159 data: response.body,
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-number/client/client.gen.ts
··· 144 144 case 'arrayBuffer': 145 145 case 'blob': 146 146 case 'formData': 147 - case 'json': 148 147 case 'text': 149 148 data = await response[parseAs](); 150 149 break; 150 + case 'json': { 151 + // Some servers return 200 with no Content-Length and empty body. 152 + // response.json() would throw; read as text and parse if non-empty. 153 + const text = await response.text(); 154 + data = text ? JSON.parse(text) : {}; 155 + break; 156 + } 151 157 case 'stream': 152 158 return { 153 159 data: response.body,
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-strict/client/client.gen.ts
··· 144 144 case 'arrayBuffer': 145 145 case 'blob': 146 146 case 'formData': 147 - case 'json': 148 147 case 'text': 149 148 data = await response[parseAs](); 150 149 break; 150 + case 'json': { 151 + // Some servers return 200 with no Content-Length and empty body. 152 + // response.json() would throw; read as text and parse if non-empty. 153 + const text = await response.text(); 154 + data = text ? JSON.parse(text) : {}; 155 + break; 156 + } 151 157 case 'stream': 152 158 return { 153 159 data: response.body,
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/base-url-string/client/client.gen.ts
··· 144 144 case 'arrayBuffer': 145 145 case 'blob': 146 146 case 'formData': 147 - case 'json': 148 147 case 'text': 149 148 data = await response[parseAs](); 150 149 break; 150 + case 'json': { 151 + // Some servers return 200 with no Content-Length and empty body. 152 + // response.json() would throw; read as text and parse if non-empty. 153 + const text = await response.text(); 154 + data = text ? JSON.parse(text) : {}; 155 + break; 156 + } 151 157 case 'stream': 152 158 return { 153 159 data: response.body,
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/clean-false/client/client.gen.ts
··· 144 144 case 'arrayBuffer': 145 145 case 'blob': 146 146 case 'formData': 147 - case 'json': 148 147 case 'text': 149 148 data = await response[parseAs](); 150 149 break; 150 + case 'json': { 151 + // Some servers return 200 with no Content-Length and empty body. 152 + // response.json() would throw; read as text and parse if non-empty. 153 + const text = await response.text(); 154 + data = text ? JSON.parse(text) : {}; 155 + break; 156 + } 151 157 case 'stream': 152 158 return { 153 159 data: response.body,
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/default/client/client.gen.ts
··· 144 144 case 'arrayBuffer': 145 145 case 'blob': 146 146 case 'formData': 147 - case 'json': 148 147 case 'text': 149 148 data = await response[parseAs](); 150 149 break; 150 + case 'json': { 151 + // Some servers return 200 with no Content-Length and empty body. 152 + // response.json() would throw; read as text and parse if non-empty. 153 + const text = await response.text(); 154 + data = text ? JSON.parse(text) : {}; 155 + break; 156 + } 151 157 case 'stream': 152 158 return { 153 159 data: response.body,
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/import-file-extension-ts/client/client.gen.ts
··· 144 144 case 'arrayBuffer': 145 145 case 'blob': 146 146 case 'formData': 147 - case 'json': 148 147 case 'text': 149 148 data = await response[parseAs](); 150 149 break; 150 + case 'json': { 151 + // Some servers return 200 with no Content-Length and empty body. 152 + // response.json() would throw; read as text and parse if non-empty. 153 + const text = await response.text(); 154 + data = text ? JSON.parse(text) : {}; 155 + break; 156 + } 151 157 case 'stream': 152 158 return { 153 159 data: response.body,
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/sdk-client-optional/client/client.gen.ts
··· 144 144 case 'arrayBuffer': 145 145 case 'blob': 146 146 case 'formData': 147 - case 'json': 148 147 case 'text': 149 148 data = await response[parseAs](); 150 149 break; 150 + case 'json': { 151 + // Some servers return 200 with no Content-Length and empty body. 152 + // response.json() would throw; read as text and parse if non-empty. 153 + const text = await response.text(); 154 + data = text ? JSON.parse(text) : {}; 155 + break; 156 + } 151 157 case 'stream': 152 158 return { 153 159 data: response.body,
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/sdk-client-required/client/client.gen.ts
··· 144 144 case 'arrayBuffer': 145 145 case 'blob': 146 146 case 'formData': 147 - case 'json': 148 147 case 'text': 149 148 data = await response[parseAs](); 150 149 break; 150 + case 'json': { 151 + // Some servers return 200 with no Content-Length and empty body. 152 + // response.json() would throw; read as text and parse if non-empty. 153 + const text = await response.text(); 154 + data = text ? JSON.parse(text) : {}; 155 + break; 156 + } 151 157 case 'stream': 152 158 return { 153 159 data: response.body,
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/tsconfig-node16-sdk/client/client.gen.ts
··· 144 144 case 'arrayBuffer': 145 145 case 'blob': 146 146 case 'formData': 147 - case 'json': 148 147 case 'text': 149 148 data = await response[parseAs](); 150 149 break; 150 + case 'json': { 151 + // Some servers return 200 with no Content-Length and empty body. 152 + // response.json() would throw; read as text and parse if non-empty. 153 + const text = await response.text(); 154 + data = text ? JSON.parse(text) : {}; 155 + break; 156 + } 151 157 case 'stream': 152 158 return { 153 159 data: response.body,
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-next/tsconfig-nodenext-sdk/client/client.gen.ts
··· 144 144 case 'arrayBuffer': 145 145 case 'blob': 146 146 case 'formData': 147 - case 'json': 148 147 case 'text': 149 148 data = await response[parseAs](); 150 149 break; 150 + case 'json': { 151 + // Some servers return 200 with no Content-Length and empty body. 152 + // response.json() would throw; read as text and parse if non-empty. 153 + const text = await response.text(); 154 + data = text ? JSON.parse(text) : {}; 155 + break; 156 + } 151 157 case 'stream': 152 158 return { 153 159 data: response.body,
+5 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/client-custom/bundle/client/index.cjs
··· 399 399 case "arrayBuffer": 400 400 case "blob": 401 401 case "formData": 402 - case "json": 403 402 case "text": 404 403 data = await response[parseAs](); 405 404 break; 405 + case "json": { 406 + const text = await response.text(); 407 + data = text ? JSON.parse(text) : {}; 408 + break; 409 + } 406 410 case "stream": return { 407 411 data: response.body, 408 412 ...result
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/headers/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/internal-name-conflict/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/pagination-ref/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/parameter-explode-false/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes-instance/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/client-fetch/sdk-nested-classes/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/default/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/instance/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/sdk/throwOnError/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-valibot/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/transformers/type-format-zod/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-custom-name/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@hey-api/typescript/transforms-read-write-ignore/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/asClass/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@pinia/colada/fetch/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/asClass/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/fetch/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/angular-query-experimental/name-builder/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/asClass/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/fetch/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/react-query/name-builder/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/asClass/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/fetch/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/solid-query/name-builder/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/asClass/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/fetch/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/svelte-query/name-builder/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/asClass/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/fetch/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/plugins/@tanstack/vue-query/name-builder/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-api-key/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-false/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-http-bearer/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-oauth2/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/security-open-id-connect/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/servers/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-fetch/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-next/client/client.gen.ts
··· 144 144 case 'arrayBuffer': 145 145 case 'blob': 146 146 case 'formData': 147 - case 'json': 148 147 case 'text': 149 148 data = await response[parseAs](); 150 149 break; 150 + case 'json': { 151 + // Some servers return 200 with no Content-Length and empty body. 152 + // response.json() would throw; read as text and parse if non-empty. 153 + const text = await response.text(); 154 + data = text ? JSON.parse(text) : {}; 155 + break; 156 + } 151 157 case 'stream': 152 158 return { 153 159 data: response.body,
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-all-of/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-any-of-null/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-array/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transformers-recursive/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/transforms-read-write/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/sdks/__snapshots__/method-class-conflict/class/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/sdks/__snapshots__/method-class-conflict/flat/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/sdks/__snapshots__/method-class-conflict/instance/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/sdks/__snapshots__/opencode/export-all/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/sdks/__snapshots__/opencode/flat/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+7 -1
packages/openapi-ts-tests/sdks/__snapshots__/opencode/grouped/client/client.gen.ts
··· 182 182 case 'arrayBuffer': 183 183 case 'blob': 184 184 case 'formData': 185 - case 'json': 186 185 case 'text': 187 186 data = await response[parseAs](); 188 187 break; 188 + case 'json': { 189 + // Some servers return 200 with no Content-Length and empty body. 190 + // response.json() would throw; read as text and parse if non-empty. 191 + const text = await response.text(); 192 + data = text ? JSON.parse(text) : {}; 193 + break; 194 + } 189 195 case 'stream': 190 196 return opts.responseStyle === 'data' 191 197 ? response.body
+39
packages/openapi-ts/src/plugins/@hey-api/client-fetch/__tests__/client.test.ts
··· 221 221 expect(result.data).toBeInstanceOf(Blob); 222 222 expect((result.data as Blob).size).toBeGreaterThan(0); 223 223 }); 224 + 225 + it('returns empty object for empty JSON response without Content-Length header (status 200)', async () => { 226 + // Simulates a server returning an empty body with status 200 and no Content-Length header 227 + // This is the scenario described in the issue where response.json() throws 228 + const mockResponse = new Response('', { 229 + headers: { 230 + 'Content-Type': 'application/json', 231 + }, 232 + status: 200, 233 + }); 234 + 235 + const mockFetch: MockFetch = vi.fn().mockResolvedValue(mockResponse); 236 + 237 + const result = await client.request({ 238 + fetch: mockFetch, 239 + method: 'GET', 240 + url: '/test', 241 + }); 242 + 243 + expect(result.data).toEqual({}); 244 + }); 245 + 246 + it('returns empty object for empty response without Content-Length header and no Content-Type (defaults to JSON)', async () => { 247 + // Tests the auto-detection behavior when no Content-Type is provided 248 + const mockResponse = new Response('', { 249 + status: 200, 250 + }); 251 + 252 + const mockFetch: MockFetch = vi.fn().mockResolvedValue(mockResponse); 253 + 254 + const result = await client.request({ 255 + fetch: mockFetch, 256 + method: 'GET', 257 + url: '/test', 258 + }); 259 + 260 + // When parseAs is 'auto' and no Content-Type header exists, it should handle empty body gracefully 261 + expect(result.data).toBeDefined(); 262 + }); 224 263 }); 225 264 226 265 describe('unserialized request body handling', () => {
+7 -1
packages/openapi-ts/src/plugins/@hey-api/client-fetch/bundle/client.ts
··· 180 180 case 'arrayBuffer': 181 181 case 'blob': 182 182 case 'formData': 183 - case 'json': 184 183 case 'text': 185 184 data = await response[parseAs](); 186 185 break; 186 + case 'json': { 187 + // Some servers return 200 with no Content-Length and empty body. 188 + // response.json() would throw; read as text and parse if non-empty. 189 + const text = await response.text(); 190 + data = text ? JSON.parse(text) : {}; 191 + break; 192 + } 187 193 case 'stream': 188 194 return opts.responseStyle === 'data' 189 195 ? response.body
+39
packages/openapi-ts/src/plugins/@hey-api/client-ky/__tests__/client.test.ts
··· 219 219 expect(result.data).toBeInstanceOf(Blob); 220 220 expect((result.data as Blob).size).toBeGreaterThan(0); 221 221 }); 222 + 223 + it('returns empty object for empty JSON response without Content-Length header (status 200)', async () => { 224 + // Simulates a server returning an empty body with status 200 and no Content-Length header 225 + // This is the scenario described in the issue where response.json() throws 226 + const mockResponse = new Response('', { 227 + headers: { 228 + 'Content-Type': 'application/json', 229 + }, 230 + status: 200, 231 + }); 232 + 233 + const mockKy = vi.fn().mockResolvedValue(mockResponse); 234 + 235 + const result = await client.request({ 236 + ky: mockKy as Partial<KyInstance> as KyInstance, 237 + method: 'GET', 238 + url: '/test', 239 + }); 240 + 241 + expect(result.data).toEqual({}); 242 + }); 243 + 244 + it('returns empty object for empty response without Content-Length header and no Content-Type (defaults to JSON)', async () => { 245 + // Tests the auto-detection behavior when no Content-Type is provided 246 + const mockResponse = new Response('', { 247 + status: 200, 248 + }); 249 + 250 + const mockKy = vi.fn().mockResolvedValue(mockResponse); 251 + 252 + const result = await client.request({ 253 + ky: mockKy as Partial<KyInstance> as KyInstance, 254 + method: 'GET', 255 + url: '/test', 256 + }); 257 + 258 + // When parseAs is 'auto' and no Content-Type header exists, it should handle empty body gracefully 259 + expect(result.data).toBeDefined(); 260 + }); 222 261 }); 223 262 224 263 describe('unserialized request body handling', () => {
+7 -1
packages/openapi-ts/src/plugins/@hey-api/client-ky/bundle/client.ts
··· 249 249 case 'arrayBuffer': 250 250 case 'blob': 251 251 case 'formData': 252 - case 'json': 253 252 case 'text': 254 253 data = await response[parseAs](); 255 254 break; 255 + case 'json': { 256 + // Some servers return 200 with no Content-Length and empty body. 257 + // response.json() would throw; read as text and parse if non-empty. 258 + const text = await response.text(); 259 + data = text ? JSON.parse(text) : {}; 260 + break; 261 + } 256 262 case 'stream': 257 263 return opts.responseStyle === 'data' 258 264 ? response.body
+63
packages/openapi-ts/src/plugins/@hey-api/client-next/__tests__/client.test.ts
··· 54 54 }); 55 55 }); 56 56 57 + describe('zero-length body handling', () => { 58 + const client = createClient({ baseUrl: 'https://example.com' }); 59 + 60 + it('returns empty object for zero-length JSON response', async () => { 61 + const mockResponse = new Response(null, { 62 + headers: { 63 + 'Content-Length': '0', 64 + 'Content-Type': 'application/json', 65 + }, 66 + status: 200, 67 + }); 68 + 69 + const mockFetch: MockFetch = vi.fn().mockResolvedValue(mockResponse); 70 + 71 + const result = await client.request({ 72 + fetch: mockFetch, 73 + method: 'GET', 74 + url: '/test', 75 + }); 76 + 77 + expect(result.data).toEqual({}); 78 + }); 79 + 80 + it('returns empty object for empty JSON response without Content-Length header (status 200)', async () => { 81 + // Simulates a server returning an empty body with status 200 and no Content-Length header 82 + // This is the scenario described in the issue where response.json() throws 83 + const mockResponse = new Response('', { 84 + headers: { 85 + 'Content-Type': 'application/json', 86 + }, 87 + status: 200, 88 + }); 89 + 90 + const mockFetch: MockFetch = vi.fn().mockResolvedValue(mockResponse); 91 + 92 + const result = await client.request({ 93 + fetch: mockFetch, 94 + method: 'GET', 95 + url: '/test', 96 + }); 97 + 98 + expect(result.data).toEqual({}); 99 + }); 100 + 101 + it('returns empty object for empty response without Content-Length header and no Content-Type (defaults to JSON)', async () => { 102 + // Tests the auto-detection behavior when no Content-Type is provided 103 + const mockResponse = new Response('', { 104 + status: 200, 105 + }); 106 + 107 + const mockFetch: MockFetch = vi.fn().mockResolvedValue(mockResponse); 108 + 109 + const result = await client.request({ 110 + fetch: mockFetch, 111 + method: 'GET', 112 + url: '/test', 113 + }); 114 + 115 + // When parseAs is 'auto' and no Content-Type header exists, it should handle empty body gracefully 116 + expect(result.data).toBeDefined(); 117 + }); 118 + }); 119 + 57 120 describe('unserialized request body handling', () => { 58 121 const client = createClient({ baseUrl: 'https://example.com' }); 59 122
+7 -1
packages/openapi-ts/src/plugins/@hey-api/client-next/bundle/client.ts
··· 142 142 case 'arrayBuffer': 143 143 case 'blob': 144 144 case 'formData': 145 - case 'json': 146 145 case 'text': 147 146 data = await response[parseAs](); 148 147 break; 148 + case 'json': { 149 + // Some servers return 200 with no Content-Length and empty body. 150 + // response.json() would throw; read as text and parse if non-empty. 151 + const text = await response.text(); 152 + data = text ? JSON.parse(text) : {}; 153 + break; 154 + } 149 155 case 'stream': 150 156 return { 151 157 data: response.body,