@trpc/server 10.28.2 → 10.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/adapters/aws-lambda/index.js +1 -1
  2. package/dist/adapters/aws-lambda/index.mjs +1 -1
  3. package/dist/adapters/express.js +5 -4
  4. package/dist/adapters/express.mjs +5 -4
  5. package/dist/adapters/fastify/fastifyRequestHandler.d.ts +1 -1
  6. package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
  7. package/dist/adapters/fastify/index.js +50 -15
  8. package/dist/adapters/fastify/index.mjs +50 -15
  9. package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -1
  10. package/dist/adapters/fetch/index.js +66 -20
  11. package/dist/adapters/fetch/index.mjs +66 -20
  12. package/dist/adapters/next.js +3 -2
  13. package/dist/adapters/next.mjs +3 -2
  14. package/dist/adapters/node-http/content-type/form-data/index.js +19 -46
  15. package/dist/adapters/node-http/content-type/form-data/index.mjs +19 -40
  16. package/dist/adapters/node-http/content-type/form-data/streamSlice.d.ts +7 -3
  17. package/dist/adapters/node-http/content-type/form-data/streamSlice.d.ts.map +1 -1
  18. package/dist/adapters/node-http/index.js +5 -4
  19. package/dist/adapters/node-http/index.mjs +5 -4
  20. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
  21. package/dist/adapters/standalone.js +5 -4
  22. package/dist/adapters/standalone.mjs +5 -4
  23. package/dist/batchStreamFormatter-2c1405a1.js +31 -0
  24. package/dist/batchStreamFormatter-93cdcdd4.js +32 -0
  25. package/dist/batchStreamFormatter-fc1ffb26.mjs +30 -0
  26. package/dist/http/batchStreamFormatter.d.ts +24 -0
  27. package/dist/http/batchStreamFormatter.d.ts.map +1 -0
  28. package/dist/http/index.d.ts +1 -0
  29. package/dist/http/index.d.ts.map +1 -1
  30. package/dist/http/index.js +3 -1
  31. package/dist/http/index.mjs +2 -1
  32. package/dist/http/internals/types.d.ts +7 -0
  33. package/dist/http/internals/types.d.ts.map +1 -1
  34. package/dist/http/resolveHTTPResponse.d.ts +36 -2
  35. package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
  36. package/dist/{nodeHTTPRequestHandler-bd47641d.js → nodeHTTPRequestHandler-53b9fc2d.js} +44 -12
  37. package/dist/{nodeHTTPRequestHandler-0f979796.mjs → nodeHTTPRequestHandler-bdad2781.mjs} +42 -13
  38. package/dist/{nodeHTTPRequestHandler-5bbf93f1.js → nodeHTTPRequestHandler-e637755a.js} +42 -13
  39. package/dist/resolveHTTPResponse-2bdf2cd7.js +256 -0
  40. package/dist/resolveHTTPResponse-2c307e04.js +284 -0
  41. package/dist/resolveHTTPResponse-a9be3d96.mjs +282 -0
  42. package/package.json +4 -4
  43. package/src/adapters/fastify/fastifyRequestHandler.ts +64 -17
  44. package/src/adapters/fetch/fetchRequestHandler.ts +72 -25
  45. package/src/adapters/node-http/content-type/form-data/streamSlice.ts +19 -21
  46. package/src/adapters/node-http/nodeHTTPRequestHandler.ts +51 -12
  47. package/src/http/batchStreamFormatter.ts +29 -0
  48. package/src/http/index.ts +1 -0
  49. package/src/http/internals/types.ts +8 -0
  50. package/src/http/resolveHTTPResponse.ts +335 -124
  51. package/dist/resolveHTTPResponse-4e576698.mjs +0 -174
  52. package/dist/resolveHTTPResponse-9523b4e3.js +0 -176
  53. package/dist/resolveHTTPResponse-ba557d3e.js +0 -166
@@ -6,7 +6,7 @@ var TRPCError = require('../../TRPCError-16b2e52d.js');
6
6
  require('../../index-4a823936.js');
7
7
  require('../../codes-0eeb600d.js');
8
8
  require('../../config-f3ce0144.js');
9
- var resolveHTTPResponse = require('../../resolveHTTPResponse-9523b4e3.js');
9
+ var resolveHTTPResponse = require('../../resolveHTTPResponse-2c307e04.js');
10
10
  require('../../transformTRPCResponse-48d70ef6.js');
11
11
  require('../../contentType-8356d528.js');
12
12
 
@@ -2,7 +2,7 @@ import { T as TRPCError } from '../../TRPCError-2b10c8d2.mjs';
2
2
  import '../../index-044a193b.mjs';
3
3
  import '../../codes-24aa1ce1.mjs';
4
4
  import '../../config-65c5b6d1.mjs';
5
- import { r as resolveHTTPResponse } from '../../resolveHTTPResponse-4e576698.mjs';
5
+ import { r as resolveHTTPResponse } from '../../resolveHTTPResponse-a9be3d96.mjs';
6
6
  import '../../transformTRPCResponse-3dca0b20.mjs';
7
7
  import '../../contentType-acc3be52.mjs';
8
8
 
@@ -2,14 +2,15 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var nodeHTTPRequestHandler = require('../nodeHTTPRequestHandler-5bbf93f1.js');
6
- require('../resolveHTTPResponse-9523b4e3.js');
7
- require('../config-f3ce0144.js');
8
- require('../TRPCError-16b2e52d.js');
5
+ var nodeHTTPRequestHandler = require('../nodeHTTPRequestHandler-e637755a.js');
9
6
  require('../index-4a823936.js');
10
7
  require('../codes-0eeb600d.js');
8
+ require('../resolveHTTPResponse-2c307e04.js');
9
+ require('../config-f3ce0144.js');
10
+ require('../TRPCError-16b2e52d.js');
11
11
  require('../transformTRPCResponse-48d70ef6.js');
12
12
  require('../contentType-8356d528.js');
13
+ require('../batchStreamFormatter-93cdcdd4.js');
13
14
  require('./node-http/content-type/json/index.js');
14
15
  require('../contentType-8c16408e.js');
15
16
 
@@ -1,11 +1,12 @@
1
- import { n as nodeHTTPRequestHandler } from '../nodeHTTPRequestHandler-0f979796.mjs';
2
- import '../resolveHTTPResponse-4e576698.mjs';
3
- import '../config-65c5b6d1.mjs';
4
- import '../TRPCError-2b10c8d2.mjs';
1
+ import { n as nodeHTTPRequestHandler } from '../nodeHTTPRequestHandler-bdad2781.mjs';
5
2
  import '../index-044a193b.mjs';
6
3
  import '../codes-24aa1ce1.mjs';
4
+ import '../resolveHTTPResponse-a9be3d96.mjs';
5
+ import '../config-65c5b6d1.mjs';
6
+ import '../TRPCError-2b10c8d2.mjs';
7
7
  import '../transformTRPCResponse-3dca0b20.mjs';
8
8
  import '../contentType-acc3be52.mjs';
9
+ import '../batchStreamFormatter-fc1ffb26.mjs';
9
10
  import './node-http/content-type/json/index.mjs';
10
11
  import '../contentType-3194ed5f.mjs';
11
12
 
@@ -8,6 +8,6 @@ type FastifyRequestHandlerOptions<TRouter extends AnyRouter, TRequest extends Fa
8
8
  res: TResponse;
9
9
  path: string;
10
10
  } & FastifyHandlerOptions<TRouter, TRequest, TResponse>;
11
- export declare function fastifyRequestHandler<TRouter extends AnyRouter, TRequest extends FastifyRequest, TResponse extends FastifyReply>(opts: FastifyRequestHandlerOptions<TRouter, TRequest, TResponse>): Promise<void>;
11
+ export declare function fastifyRequestHandler<TRouter extends AnyRouter, TRequest extends FastifyRequest, TResponse extends FastifyReply>(opts: FastifyRequestHandlerOptions<TRouter, TRequest, TResponse>): Promise<never>;
12
12
  export {};
13
13
  //# sourceMappingURL=fastifyRequestHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fastifyRequestHandler.d.ts","sourceRoot":"","sources":["../../../src/adapters/fastify/fastifyRequestHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,SAAS,EAAsB,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAe,MAAM,YAAY,CAAC;AAEjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,MAAM,qBAAqB,CAC/B,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,cAAc,EAC/B,SAAS,SAAS,YAAY,IAC5B,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAC3C,2BAA2B,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAE5D,KAAK,4BAA4B,CAC/B,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,cAAc,EAC/B,SAAS,SAAS,YAAY,IAC5B;IACF,GAAG,EAAE,QAAQ,CAAC;IACd,GAAG,EAAE,SAAS,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,qBAAqB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAExD,wBAAsB,qBAAqB,CACzC,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,cAAc,EAC/B,SAAS,SAAS,YAAY,EAC9B,IAAI,EAAE,4BAA4B,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,iBA4CjE"}
1
+ {"version":3,"file":"fastifyRequestHandler.d.ts","sourceRoot":"","sources":["../../../src/adapters/fastify/fastifyRequestHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,SAAS,EAAsB,MAAM,YAAY,CAAC;AAC3D,OAAO,EAEL,sBAAsB,EAEvB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,MAAM,qBAAqB,CAC/B,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,cAAc,EAC/B,SAAS,SAAS,YAAY,IAC5B,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAC3C,2BAA2B,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAE5D,KAAK,4BAA4B,CAC/B,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,cAAc,EAC/B,SAAS,SAAS,YAAY,IAC5B;IACF,GAAG,EAAE,QAAQ,CAAC;IACd,GAAG,EAAE,SAAS,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,qBAAqB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAExD,wBAAsB,qBAAqB,CACzC,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,cAAc,EAC/B,SAAS,SAAS,YAAY,EAC9B,IAAI,EAAE,4BAA4B,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,kBAqFjE"}
@@ -2,12 +2,14 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var resolveHTTPResponse = require('../../resolveHTTPResponse-9523b4e3.js');
5
+ var node_stream = require('node:stream');
6
+ require('../../index-4a823936.js');
7
+ var resolveHTTPResponse = require('../../resolveHTTPResponse-2c307e04.js');
8
+ var batchStreamFormatter = require('../../batchStreamFormatter-93cdcdd4.js');
6
9
  var adapters_ws = require('../ws.js');
10
+ require('../../codes-0eeb600d.js');
7
11
  require('../../config-f3ce0144.js');
8
12
  require('../../TRPCError-16b2e52d.js');
9
- require('../../index-4a823936.js');
10
- require('../../codes-0eeb600d.js');
11
13
  require('../../transformTRPCResponse-48d70ef6.js');
12
14
  require('../../contentType-8356d528.js');
13
15
  require('../../observable-464116ac.js');
@@ -23,7 +25,39 @@ async function fastifyRequestHandler(opts) {
23
25
  headers: opts.req.headers,
24
26
  body: opts.req.body ?? 'null'
25
27
  };
26
- const result = await resolveHTTPResponse.resolveHTTPResponse({
28
+ let resolve;
29
+ const promise = new Promise((r)=>resolve = r);
30
+ const onHead = (head)=>{
31
+ if (!opts.res.statusCode || opts.res.statusCode === 200) {
32
+ opts.res.statusCode = head.status;
33
+ }
34
+ for (const [key, value] of Object.entries(head.headers ?? {})){
35
+ /* istanbul ignore if -- @preserve */ if (typeof value === 'undefined') {
36
+ continue;
37
+ }
38
+ void opts.res.header(key, value);
39
+ }
40
+ };
41
+ let isStream = false;
42
+ let stream;
43
+ const formatter = batchStreamFormatter.getBatchStreamFormatter();
44
+ const onChunk = ([index, string])=>{
45
+ if (index === -1) {
46
+ // full response, no streaming
47
+ resolve(opts.res.send(string));
48
+ return;
49
+ }
50
+ if (!isStream) {
51
+ void opts.res.header('Transfer-Encoding', 'chunked');
52
+ void opts.res.header('Vary', opts.res.hasHeader('Vary') ? 'trpc-batch-mode, ' + opts.res.getHeader('Vary') : 'trpc-batch-mode');
53
+ stream = new node_stream.Readable();
54
+ stream._read = ()=>{}; // eslint-disable-line @typescript-eslint/no-empty-function -- https://github.com/fastify/fastify/issues/805#issuecomment-369172154
55
+ resolve(opts.res.send(stream));
56
+ isStream = true;
57
+ }
58
+ stream.push(formatter(index, string));
59
+ };
60
+ resolveHTTPResponse.resolveHTTPResponse({
27
61
  req,
28
62
  createContext,
29
63
  path: opts.path,
@@ -35,19 +69,20 @@ async function fastifyRequestHandler(opts) {
35
69
  ...o,
36
70
  req: opts.req
37
71
  });
72
+ },
73
+ onHead,
74
+ onChunk
75
+ }).then(()=>{
76
+ if (isStream) {
77
+ stream.push(formatter.end());
78
+ stream.push(null); // https://github.com/fastify/fastify/issues/805#issuecomment-369172154
38
79
  }
39
- });
40
- const { res } = opts;
41
- if ('status' in result && (!res.statusCode || res.statusCode === 200)) {
42
- res.statusCode = result.status;
43
- }
44
- for (const [key, value] of Object.entries(result.headers ?? {})){
45
- /* istanbul ignore if -- @preserve */ if (typeof value === 'undefined') {
46
- continue;
80
+ }).catch(()=>{
81
+ if (isStream) {
82
+ stream.push(null);
47
83
  }
48
- void res.header(key, value);
49
- }
50
- await res.send(result.body);
84
+ });
85
+ return promise;
51
86
  }
52
87
 
53
88
  /// <reference types="@fastify/websocket" />
@@ -1,9 +1,11 @@
1
- import { r as resolveHTTPResponse } from '../../resolveHTTPResponse-4e576698.mjs';
1
+ import { Readable } from 'node:stream';
2
+ import '../../index-044a193b.mjs';
3
+ import { r as resolveHTTPResponse } from '../../resolveHTTPResponse-a9be3d96.mjs';
4
+ import { g as getBatchStreamFormatter } from '../../batchStreamFormatter-fc1ffb26.mjs';
2
5
  import { applyWSSHandler } from '../ws.mjs';
6
+ import '../../codes-24aa1ce1.mjs';
3
7
  import '../../config-65c5b6d1.mjs';
4
8
  import '../../TRPCError-2b10c8d2.mjs';
5
- import '../../index-044a193b.mjs';
6
- import '../../codes-24aa1ce1.mjs';
7
9
  import '../../transformTRPCResponse-3dca0b20.mjs';
8
10
  import '../../contentType-acc3be52.mjs';
9
11
  import '../../observable-ade1bad8.mjs';
@@ -19,7 +21,39 @@ async function fastifyRequestHandler(opts) {
19
21
  headers: opts.req.headers,
20
22
  body: opts.req.body ?? 'null'
21
23
  };
22
- const result = await resolveHTTPResponse({
24
+ let resolve;
25
+ const promise = new Promise((r)=>resolve = r);
26
+ const onHead = (head)=>{
27
+ if (!opts.res.statusCode || opts.res.statusCode === 200) {
28
+ opts.res.statusCode = head.status;
29
+ }
30
+ for (const [key, value] of Object.entries(head.headers ?? {})){
31
+ /* istanbul ignore if -- @preserve */ if (typeof value === 'undefined') {
32
+ continue;
33
+ }
34
+ void opts.res.header(key, value);
35
+ }
36
+ };
37
+ let isStream = false;
38
+ let stream;
39
+ const formatter = getBatchStreamFormatter();
40
+ const onChunk = ([index, string])=>{
41
+ if (index === -1) {
42
+ // full response, no streaming
43
+ resolve(opts.res.send(string));
44
+ return;
45
+ }
46
+ if (!isStream) {
47
+ void opts.res.header('Transfer-Encoding', 'chunked');
48
+ void opts.res.header('Vary', opts.res.hasHeader('Vary') ? 'trpc-batch-mode, ' + opts.res.getHeader('Vary') : 'trpc-batch-mode');
49
+ stream = new Readable();
50
+ stream._read = ()=>{}; // eslint-disable-line @typescript-eslint/no-empty-function -- https://github.com/fastify/fastify/issues/805#issuecomment-369172154
51
+ resolve(opts.res.send(stream));
52
+ isStream = true;
53
+ }
54
+ stream.push(formatter(index, string));
55
+ };
56
+ resolveHTTPResponse({
23
57
  req,
24
58
  createContext,
25
59
  path: opts.path,
@@ -31,19 +65,20 @@ async function fastifyRequestHandler(opts) {
31
65
  ...o,
32
66
  req: opts.req
33
67
  });
68
+ },
69
+ onHead,
70
+ onChunk
71
+ }).then(()=>{
72
+ if (isStream) {
73
+ stream.push(formatter.end());
74
+ stream.push(null); // https://github.com/fastify/fastify/issues/805#issuecomment-369172154
34
75
  }
35
- });
36
- const { res } = opts;
37
- if ('status' in result && (!res.statusCode || res.statusCode === 200)) {
38
- res.statusCode = result.status;
39
- }
40
- for (const [key, value] of Object.entries(result.headers ?? {})){
41
- /* istanbul ignore if -- @preserve */ if (typeof value === 'undefined') {
42
- continue;
76
+ }).catch(()=>{
77
+ if (isStream) {
78
+ stream.push(null);
43
79
  }
44
- void res.header(key, value);
45
- }
46
- await res.send(result.body);
80
+ });
81
+ return promise;
47
82
  }
48
83
 
49
84
  /// <reference types="@fastify/websocket" />
@@ -1 +1 @@
1
- {"version":3,"file":"fetchRequestHandler.d.ts","sourceRoot":"","sources":["../../../src/adapters/fetch/fetchRequestHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,MAAM,0BAA0B,CAAC,OAAO,SAAS,SAAS,IAAI;IAClE,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAEjC,wBAAsB,mBAAmB,CAAC,OAAO,SAAS,SAAS,EACjE,IAAI,EAAE,0BAA0B,CAAC,OAAO,CAAC,GACxC,OAAO,CAAC,QAAQ,CAAC,CAqDnB"}
1
+ {"version":3,"file":"fetchRequestHandler.d.ts","sourceRoot":"","sources":["../../../src/adapters/fetch/fetchRequestHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,MAAM,0BAA0B,CAAC,OAAO,SAAS,SAAS,IAAI;IAClE,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAEjC,wBAAsB,mBAAmB,CAAC,OAAO,SAAS,SAAS,EACjE,IAAI,EAAE,0BAA0B,CAAC,OAAO,CAAC,GACxC,OAAO,CAAC,QAAQ,CAAC,CAmGnB"}
@@ -2,11 +2,12 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var resolveHTTPResponse = require('../../resolveHTTPResponse-9523b4e3.js');
6
- require('../../config-f3ce0144.js');
7
- require('../../TRPCError-16b2e52d.js');
8
5
  require('../../index-4a823936.js');
6
+ var resolveHTTPResponse = require('../../resolveHTTPResponse-2c307e04.js');
7
+ var batchStreamFormatter = require('../../batchStreamFormatter-93cdcdd4.js');
9
8
  require('../../codes-0eeb600d.js');
9
+ require('../../config-f3ce0144.js');
10
+ require('../../TRPCError-16b2e52d.js');
10
11
  require('../../transformTRPCResponse-48d70ef6.js');
11
12
  require('../../contentType-8356d528.js');
12
13
 
@@ -26,7 +27,57 @@ async function fetchRequestHandler(opts) {
26
27
  headers: Object.fromEntries(opts.req.headers),
27
28
  body: opts.req.headers.get('content-type') === 'application/json' ? await opts.req.text() : ''
28
29
  };
29
- const result = await resolveHTTPResponse.resolveHTTPResponse({
30
+ let resolve;
31
+ const promise = new Promise((r)=>resolve = r);
32
+ let status = 200;
33
+ const onHead = (head)=>{
34
+ for (const [key, value] of Object.entries(head.headers ?? {})){
35
+ /* istanbul ignore if -- @preserve */ if (typeof value === 'undefined') {
36
+ continue;
37
+ }
38
+ if (typeof value === 'string') {
39
+ resHeaders.set(key, value);
40
+ continue;
41
+ }
42
+ for (const v of value){
43
+ resHeaders.append(key, v);
44
+ }
45
+ }
46
+ status = head.status;
47
+ };
48
+ let isStream = false;
49
+ let controller;
50
+ let encoder;
51
+ const formatter = batchStreamFormatter.getBatchStreamFormatter();
52
+ const onChunk = ([index, string])=>{
53
+ if (index === -1) {
54
+ // full response, no streaming
55
+ const response = new Response(string || null, {
56
+ status,
57
+ headers: resHeaders
58
+ });
59
+ resolve(response);
60
+ return;
61
+ }
62
+ if (!isStream) {
63
+ resHeaders.set('Transfer-Encoding', 'chunked');
64
+ resHeaders.append('Vary', 'trpc-batch-mode');
65
+ const stream = new ReadableStream({
66
+ start (c) {
67
+ controller = c;
68
+ }
69
+ });
70
+ const response1 = new Response(stream, {
71
+ status,
72
+ headers: resHeaders
73
+ });
74
+ resolve(response1);
75
+ encoder = new TextEncoder();
76
+ isStream = true;
77
+ }
78
+ controller.enqueue(encoder.encode(formatter(index, string)));
79
+ };
80
+ resolveHTTPResponse.resolveHTTPResponse({
30
81
  req,
31
82
  createContext,
32
83
  path,
@@ -38,25 +89,20 @@ async function fetchRequestHandler(opts) {
38
89
  ...o,
39
90
  req: opts.req
40
91
  });
92
+ },
93
+ onHead,
94
+ onChunk
95
+ }).then(()=>{
96
+ if (isStream) {
97
+ controller.enqueue(encoder.encode(formatter.end()));
98
+ controller.close();
41
99
  }
42
- });
43
- for (const [key, value] of Object.entries(result.headers ?? {})){
44
- /* istanbul ignore if -- @preserve */ if (typeof value === 'undefined') {
45
- continue;
46
- }
47
- if (typeof value === 'string') {
48
- resHeaders.set(key, value);
49
- continue;
50
- }
51
- for (const v of value){
52
- resHeaders.append(key, v);
100
+ }).catch(()=>{
101
+ if (isStream) {
102
+ controller.close();
53
103
  }
54
- }
55
- const res = new Response(result.body, {
56
- status: result.status,
57
- headers: resHeaders
58
104
  });
59
- return res;
105
+ return promise;
60
106
  }
61
107
 
62
108
  exports.fetchRequestHandler = fetchRequestHandler;
@@ -1,8 +1,9 @@
1
- import { r as resolveHTTPResponse } from '../../resolveHTTPResponse-4e576698.mjs';
2
- import '../../config-65c5b6d1.mjs';
3
- import '../../TRPCError-2b10c8d2.mjs';
4
1
  import '../../index-044a193b.mjs';
2
+ import { r as resolveHTTPResponse } from '../../resolveHTTPResponse-a9be3d96.mjs';
3
+ import { g as getBatchStreamFormatter } from '../../batchStreamFormatter-fc1ffb26.mjs';
5
4
  import '../../codes-24aa1ce1.mjs';
5
+ import '../../config-65c5b6d1.mjs';
6
+ import '../../TRPCError-2b10c8d2.mjs';
6
7
  import '../../transformTRPCResponse-3dca0b20.mjs';
7
8
  import '../../contentType-acc3be52.mjs';
8
9
 
@@ -22,7 +23,57 @@ async function fetchRequestHandler(opts) {
22
23
  headers: Object.fromEntries(opts.req.headers),
23
24
  body: opts.req.headers.get('content-type') === 'application/json' ? await opts.req.text() : ''
24
25
  };
25
- const result = await resolveHTTPResponse({
26
+ let resolve;
27
+ const promise = new Promise((r)=>resolve = r);
28
+ let status = 200;
29
+ const onHead = (head)=>{
30
+ for (const [key, value] of Object.entries(head.headers ?? {})){
31
+ /* istanbul ignore if -- @preserve */ if (typeof value === 'undefined') {
32
+ continue;
33
+ }
34
+ if (typeof value === 'string') {
35
+ resHeaders.set(key, value);
36
+ continue;
37
+ }
38
+ for (const v of value){
39
+ resHeaders.append(key, v);
40
+ }
41
+ }
42
+ status = head.status;
43
+ };
44
+ let isStream = false;
45
+ let controller;
46
+ let encoder;
47
+ const formatter = getBatchStreamFormatter();
48
+ const onChunk = ([index, string])=>{
49
+ if (index === -1) {
50
+ // full response, no streaming
51
+ const response = new Response(string || null, {
52
+ status,
53
+ headers: resHeaders
54
+ });
55
+ resolve(response);
56
+ return;
57
+ }
58
+ if (!isStream) {
59
+ resHeaders.set('Transfer-Encoding', 'chunked');
60
+ resHeaders.append('Vary', 'trpc-batch-mode');
61
+ const stream = new ReadableStream({
62
+ start (c) {
63
+ controller = c;
64
+ }
65
+ });
66
+ const response1 = new Response(stream, {
67
+ status,
68
+ headers: resHeaders
69
+ });
70
+ resolve(response1);
71
+ encoder = new TextEncoder();
72
+ isStream = true;
73
+ }
74
+ controller.enqueue(encoder.encode(formatter(index, string)));
75
+ };
76
+ resolveHTTPResponse({
26
77
  req,
27
78
  createContext,
28
79
  path,
@@ -34,25 +85,20 @@ async function fetchRequestHandler(opts) {
34
85
  ...o,
35
86
  req: opts.req
36
87
  });
88
+ },
89
+ onHead,
90
+ onChunk
91
+ }).then(()=>{
92
+ if (isStream) {
93
+ controller.enqueue(encoder.encode(formatter.end()));
94
+ controller.close();
37
95
  }
38
- });
39
- for (const [key, value] of Object.entries(result.headers ?? {})){
40
- /* istanbul ignore if -- @preserve */ if (typeof value === 'undefined') {
41
- continue;
42
- }
43
- if (typeof value === 'string') {
44
- resHeaders.set(key, value);
45
- continue;
46
- }
47
- for (const v of value){
48
- resHeaders.append(key, v);
96
+ }).catch(()=>{
97
+ if (isStream) {
98
+ controller.close();
49
99
  }
50
- }
51
- const res = new Response(result.body, {
52
- status: result.status,
53
- headers: resHeaders
54
100
  });
55
- return res;
101
+ return promise;
56
102
  }
57
103
 
58
104
  export { fetchRequestHandler };
@@ -4,12 +4,13 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var TRPCError = require('../TRPCError-16b2e52d.js');
6
6
  var transformTRPCResponse = require('../transformTRPCResponse-48d70ef6.js');
7
- var nodeHTTPRequestHandler = require('../nodeHTTPRequestHandler-5bbf93f1.js');
7
+ var nodeHTTPRequestHandler = require('../nodeHTTPRequestHandler-e637755a.js');
8
8
  require('../index-4a823936.js');
9
9
  require('../codes-0eeb600d.js');
10
- require('../resolveHTTPResponse-9523b4e3.js');
10
+ require('../resolveHTTPResponse-2c307e04.js');
11
11
  require('../config-f3ce0144.js');
12
12
  require('../contentType-8356d528.js');
13
+ require('../batchStreamFormatter-93cdcdd4.js');
13
14
  require('./node-http/content-type/json/index.js');
14
15
  require('../contentType-8c16408e.js');
15
16
 
@@ -1,11 +1,12 @@
1
1
  import { T as TRPCError } from '../TRPCError-2b10c8d2.mjs';
2
2
  import { g as getErrorShape } from '../transformTRPCResponse-3dca0b20.mjs';
3
- import { n as nodeHTTPRequestHandler } from '../nodeHTTPRequestHandler-0f979796.mjs';
3
+ import { n as nodeHTTPRequestHandler } from '../nodeHTTPRequestHandler-bdad2781.mjs';
4
4
  import '../index-044a193b.mjs';
5
5
  import '../codes-24aa1ce1.mjs';
6
- import '../resolveHTTPResponse-4e576698.mjs';
6
+ import '../resolveHTTPResponse-a9be3d96.mjs';
7
7
  import '../config-65c5b6d1.mjs';
8
8
  import '../contentType-acc3be52.mjs';
9
+ import '../batchStreamFormatter-fc1ffb26.mjs';
9
10
  import './node-http/content-type/json/index.mjs';
10
11
  import '../contentType-3194ed5f.mjs';
11
12
 
@@ -10,15 +10,6 @@ var promises = require('node:fs/promises');
10
10
  var node_os = require('node:os');
11
11
  var node_path = require('node:path');
12
12
  var node_util = require('node:util');
13
- var _class_private_field_get = require('@swc/helpers/src/_class_private_field_get.mjs');
14
- var _class_private_field_init = require('@swc/helpers/src/_class_private_field_init.mjs');
15
- var _class_private_field_set = require('@swc/helpers/src/_class_private_field_set.mjs');
16
-
17
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
18
-
19
- var _class_private_field_get__default = /*#__PURE__*/_interopDefaultLegacy(_class_private_field_get);
20
- var _class_private_field_init__default = /*#__PURE__*/_interopDefaultLegacy(_class_private_field_init);
21
- var _class_private_field_set__default = /*#__PURE__*/_interopDefaultLegacy(_class_private_field_set);
22
13
 
23
14
  function stringToArray(s) {
24
15
  const utf8 = unescape(encodeURIComponent(s));
@@ -454,26 +445,25 @@ function createMemoryUploadHandler({ filter , maxPartSize =3000000 } = {}) {
454
445
  };
455
446
  }
456
447
 
457
- var _start = /*#__PURE__*/ new WeakMap(), _end = /*#__PURE__*/ new WeakMap(), _offset = /*#__PURE__*/ new WeakMap(), _emitUp = /*#__PURE__*/ new WeakMap(), _emitDown = /*#__PURE__*/ new WeakMap();
458
448
  class SliceStream extends node_stream.Transform {
459
449
  _transform(chunk, _, done) {
460
- _class_private_field_set__default["default"](this, _offset, _class_private_field_get__default["default"](this, _offset) + chunk.length);
461
- if (!_class_private_field_get__default["default"](this, _emitUp) && _class_private_field_get__default["default"](this, _offset) >= _class_private_field_get__default["default"](this, _start)) {
462
- _class_private_field_set__default["default"](this, _emitUp, true);
463
- const start = chunk.length - (_class_private_field_get__default["default"](this, _offset) - _class_private_field_get__default["default"](this, _start));
464
- if (_class_private_field_get__default["default"](this, _offset) > _class_private_field_get__default["default"](this, _end)) {
465
- const end = chunk.length - (_class_private_field_get__default["default"](this, _offset) - _class_private_field_get__default["default"](this, _end));
466
- _class_private_field_set__default["default"](this, _emitDown, true);
450
+ this.indexOffset += chunk.length;
451
+ if (!this.emitUp && this.indexOffset >= this.startIndex) {
452
+ this.emitUp = true;
453
+ const start = chunk.length - (this.indexOffset - this.startIndex);
454
+ if (this.indexOffset > this.endIndex) {
455
+ const end = chunk.length - (this.indexOffset - this.endIndex);
456
+ this.emitDown = true;
467
457
  this.push(chunk.slice(start, end));
468
458
  } else {
469
459
  this.push(chunk.slice(start, chunk.length));
470
460
  }
471
461
  return done();
472
462
  }
473
- if (_class_private_field_get__default["default"](this, _emitUp) && !_class_private_field_get__default["default"](this, _emitDown)) {
474
- if (_class_private_field_get__default["default"](this, _offset) >= _class_private_field_get__default["default"](this, _end)) {
475
- _class_private_field_set__default["default"](this, _emitDown, true);
476
- this.push(chunk.slice(0, chunk.length - (_class_private_field_get__default["default"](this, _offset) - _class_private_field_get__default["default"](this, _end))));
463
+ if (this.emitUp && !this.emitDown) {
464
+ if (this.indexOffset >= this.endIndex) {
465
+ this.emitDown = true;
466
+ this.push(chunk.slice(0, chunk.length - (this.indexOffset - this.endIndex)));
477
467
  } else {
478
468
  this.push(chunk);
479
469
  }
@@ -481,34 +471,17 @@ class SliceStream extends node_stream.Transform {
481
471
  }
482
472
  return done();
483
473
  }
484
- constructor(start = 0, end = Infinity){
474
+ constructor(startIndex = 0, endIndex = Infinity){
485
475
  super();
486
- _class_private_field_init__default["default"](this, _start, {
487
- writable: true,
488
- value: void 0
489
- });
490
- _class_private_field_init__default["default"](this, _end, {
491
- writable: true,
492
- value: void 0
493
- });
494
- _class_private_field_init__default["default"](this, _offset, {
495
- writable: true,
496
- value: 0
497
- });
498
- _class_private_field_init__default["default"](this, _emitUp, {
499
- writable: true,
500
- value: false
501
- });
502
- _class_private_field_init__default["default"](this, _emitDown, {
503
- writable: true,
504
- value: false
505
- });
506
- _class_private_field_set__default["default"](this, _start, start);
507
- _class_private_field_set__default["default"](this, _end, end);
476
+ this.startIndex = startIndex;
477
+ this.endIndex = endIndex;
478
+ this.indexOffset = 0;
479
+ this.emitUp = false;
480
+ this.emitDown = false;
508
481
  }
509
482
  }
510
- function streamSlice(start = 0, end = Infinity) {
511
- return new SliceStream(start, end);
483
+ function streamSlice(startIndex = 0, endIndex = Infinity) {
484
+ return new SliceStream(startIndex, endIndex);
512
485
  }
513
486
 
514
487
  async function readableStreamToString(stream, encoding) {