@trpc/server 10.28.2 → 10.29.1

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 (56) 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 +51 -15
  8. package/dist/adapters/fastify/index.mjs +51 -15
  9. package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -1
  10. package/dist/adapters/fetch/index.js +67 -20
  11. package/dist/adapters/fetch/index.mjs +67 -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/node-http/types.d.ts +11 -1
  22. package/dist/adapters/node-http/types.d.ts.map +1 -1
  23. package/dist/adapters/standalone.js +5 -4
  24. package/dist/adapters/standalone.mjs +5 -4
  25. package/dist/batchStreamFormatter-2c1405a1.js +31 -0
  26. package/dist/batchStreamFormatter-93cdcdd4.js +32 -0
  27. package/dist/batchStreamFormatter-fc1ffb26.mjs +30 -0
  28. package/dist/http/batchStreamFormatter.d.ts +24 -0
  29. package/dist/http/batchStreamFormatter.d.ts.map +1 -0
  30. package/dist/http/index.d.ts +1 -0
  31. package/dist/http/index.d.ts.map +1 -1
  32. package/dist/http/index.js +3 -1
  33. package/dist/http/index.mjs +2 -1
  34. package/dist/http/internals/types.d.ts +7 -0
  35. package/dist/http/internals/types.d.ts.map +1 -1
  36. package/dist/http/resolveHTTPResponse.d.ts +37 -2
  37. package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
  38. package/dist/{nodeHTTPRequestHandler-5bbf93f1.js → nodeHTTPRequestHandler-071d36b5.js} +44 -13
  39. package/dist/{nodeHTTPRequestHandler-bd47641d.js → nodeHTTPRequestHandler-51d58a23.js} +47 -12
  40. package/dist/{nodeHTTPRequestHandler-0f979796.mjs → nodeHTTPRequestHandler-bb12529f.mjs} +44 -13
  41. package/dist/resolveHTTPResponse-1f03fdfd.js +284 -0
  42. package/dist/resolveHTTPResponse-dd3677b3.mjs +282 -0
  43. package/dist/resolveHTTPResponse-e0047ea2.js +256 -0
  44. package/package.json +4 -4
  45. package/src/adapters/fastify/fastifyRequestHandler.ts +65 -17
  46. package/src/adapters/fetch/fetchRequestHandler.ts +73 -25
  47. package/src/adapters/node-http/content-type/form-data/streamSlice.ts +19 -21
  48. package/src/adapters/node-http/nodeHTTPRequestHandler.ts +53 -12
  49. package/src/adapters/node-http/types.ts +11 -1
  50. package/src/http/batchStreamFormatter.ts +29 -0
  51. package/src/http/index.ts +1 -0
  52. package/src/http/internals/types.ts +8 -0
  53. package/src/http/resolveHTTPResponse.ts +339 -124
  54. package/dist/resolveHTTPResponse-4e576698.mjs +0 -174
  55. package/dist/resolveHTTPResponse-9523b4e3.js +0 -176
  56. 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-1f03fdfd.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-dd3677b3.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-071d36b5.js');
9
6
  require('../index-4a823936.js');
10
7
  require('../codes-0eeb600d.js');
8
+ require('../resolveHTTPResponse-1f03fdfd.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-bb12529f.mjs';
5
2
  import '../index-044a193b.mjs';
6
3
  import '../codes-24aa1ce1.mjs';
4
+ import '../resolveHTTPResponse-dd3677b3.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,kBAsFjE"}
@@ -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-1f03fdfd.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,40 @@ 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
+ let isStream = false;
31
+ let stream;
32
+ let formatter;
33
+ const unstable_onHead = (head, isStreaming)=>{
34
+ if (!opts.res.statusCode || opts.res.statusCode === 200) {
35
+ opts.res.statusCode = head.status;
36
+ }
37
+ for (const [key, value] of Object.entries(head.headers ?? {})){
38
+ /* istanbul ignore if -- @preserve */ if (typeof value === 'undefined') {
39
+ continue;
40
+ }
41
+ void opts.res.header(key, value);
42
+ }
43
+ if (isStreaming) {
44
+ void opts.res.header('Transfer-Encoding', 'chunked');
45
+ void opts.res.header('Vary', opts.res.hasHeader('Vary') ? 'trpc-batch-mode, ' + opts.res.getHeader('Vary') : 'trpc-batch-mode');
46
+ stream = new node_stream.Readable();
47
+ stream._read = ()=>{}; // eslint-disable-line @typescript-eslint/no-empty-function -- https://github.com/fastify/fastify/issues/805#issuecomment-369172154
48
+ resolve(opts.res.send(stream));
49
+ isStream = true;
50
+ formatter = batchStreamFormatter.getBatchStreamFormatter();
51
+ }
52
+ };
53
+ const unstable_onChunk = ([index, string])=>{
54
+ if (index === -1) {
55
+ // full response, no streaming
56
+ resolve(opts.res.send(string));
57
+ } else {
58
+ stream.push(formatter(index, string));
59
+ }
60
+ };
61
+ resolveHTTPResponse.resolveHTTPResponse({
27
62
  req,
28
63
  createContext,
29
64
  path: opts.path,
@@ -35,19 +70,20 @@ async function fastifyRequestHandler(opts) {
35
70
  ...o,
36
71
  req: opts.req
37
72
  });
73
+ },
74
+ unstable_onHead,
75
+ unstable_onChunk
76
+ }).then(()=>{
77
+ if (isStream) {
78
+ stream.push(formatter.end());
79
+ stream.push(null); // https://github.com/fastify/fastify/issues/805#issuecomment-369172154
38
80
  }
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;
81
+ }).catch(()=>{
82
+ if (isStream) {
83
+ stream.push(null);
47
84
  }
48
- void res.header(key, value);
49
- }
50
- await res.send(result.body);
85
+ });
86
+ return promise;
51
87
  }
52
88
 
53
89
  /// <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-dd3677b3.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,40 @@ 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
+ let isStream = false;
27
+ let stream;
28
+ let formatter;
29
+ const unstable_onHead = (head, isStreaming)=>{
30
+ if (!opts.res.statusCode || opts.res.statusCode === 200) {
31
+ opts.res.statusCode = head.status;
32
+ }
33
+ for (const [key, value] of Object.entries(head.headers ?? {})){
34
+ /* istanbul ignore if -- @preserve */ if (typeof value === 'undefined') {
35
+ continue;
36
+ }
37
+ void opts.res.header(key, value);
38
+ }
39
+ if (isStreaming) {
40
+ void opts.res.header('Transfer-Encoding', 'chunked');
41
+ void opts.res.header('Vary', opts.res.hasHeader('Vary') ? 'trpc-batch-mode, ' + opts.res.getHeader('Vary') : 'trpc-batch-mode');
42
+ stream = new Readable();
43
+ stream._read = ()=>{}; // eslint-disable-line @typescript-eslint/no-empty-function -- https://github.com/fastify/fastify/issues/805#issuecomment-369172154
44
+ resolve(opts.res.send(stream));
45
+ isStream = true;
46
+ formatter = getBatchStreamFormatter();
47
+ }
48
+ };
49
+ const unstable_onChunk = ([index, string])=>{
50
+ if (index === -1) {
51
+ // full response, no streaming
52
+ resolve(opts.res.send(string));
53
+ } else {
54
+ stream.push(formatter(index, string));
55
+ }
56
+ };
57
+ resolveHTTPResponse({
23
58
  req,
24
59
  createContext,
25
60
  path: opts.path,
@@ -31,19 +66,20 @@ async function fastifyRequestHandler(opts) {
31
66
  ...o,
32
67
  req: opts.req
33
68
  });
69
+ },
70
+ unstable_onHead,
71
+ unstable_onChunk
72
+ }).then(()=>{
73
+ if (isStream) {
74
+ stream.push(formatter.end());
75
+ stream.push(null); // https://github.com/fastify/fastify/issues/805#issuecomment-369172154
34
76
  }
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;
77
+ }).catch(()=>{
78
+ if (isStream) {
79
+ stream.push(null);
43
80
  }
44
- void res.header(key, value);
45
- }
46
- await res.send(result.body);
81
+ });
82
+ return promise;
47
83
  }
48
84
 
49
85
  /// <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,CAoGnB"}
@@ -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-1f03fdfd.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,58 @@ 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
+ let isStream = false;
34
+ let controller;
35
+ let encoder;
36
+ let formatter;
37
+ const unstable_onHead = (head, isStreaming)=>{
38
+ for (const [key, value] of Object.entries(head.headers ?? {})){
39
+ /* istanbul ignore if -- @preserve */ if (typeof value === 'undefined') {
40
+ continue;
41
+ }
42
+ if (typeof value === 'string') {
43
+ resHeaders.set(key, value);
44
+ continue;
45
+ }
46
+ for (const v of value){
47
+ resHeaders.append(key, v);
48
+ }
49
+ }
50
+ status = head.status;
51
+ if (isStreaming) {
52
+ resHeaders.set('Transfer-Encoding', 'chunked');
53
+ resHeaders.append('Vary', 'trpc-batch-mode');
54
+ const stream = new ReadableStream({
55
+ start (c) {
56
+ controller = c;
57
+ }
58
+ });
59
+ const response = new Response(stream, {
60
+ status,
61
+ headers: resHeaders
62
+ });
63
+ resolve(response);
64
+ encoder = new TextEncoder();
65
+ formatter = batchStreamFormatter.getBatchStreamFormatter();
66
+ isStream = true;
67
+ }
68
+ };
69
+ const unstable_onChunk = ([index, string])=>{
70
+ if (index === -1) {
71
+ // full response, no streaming
72
+ const response = new Response(string || null, {
73
+ status,
74
+ headers: resHeaders
75
+ });
76
+ resolve(response);
77
+ } else {
78
+ controller.enqueue(encoder.encode(formatter(index, string)));
79
+ }
80
+ };
81
+ resolveHTTPResponse.resolveHTTPResponse({
30
82
  req,
31
83
  createContext,
32
84
  path,
@@ -38,25 +90,20 @@ async function fetchRequestHandler(opts) {
38
90
  ...o,
39
91
  req: opts.req
40
92
  });
93
+ },
94
+ unstable_onHead,
95
+ unstable_onChunk
96
+ }).then(()=>{
97
+ if (isStream) {
98
+ controller.enqueue(encoder.encode(formatter.end()));
99
+ controller.close();
41
100
  }
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);
101
+ }).catch(()=>{
102
+ if (isStream) {
103
+ controller.close();
53
104
  }
54
- }
55
- const res = new Response(result.body, {
56
- status: result.status,
57
- headers: resHeaders
58
105
  });
59
- return res;
106
+ return promise;
60
107
  }
61
108
 
62
109
  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-dd3677b3.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,58 @@ 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
+ let isStream = false;
30
+ let controller;
31
+ let encoder;
32
+ let formatter;
33
+ const unstable_onHead = (head, isStreaming)=>{
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
+ if (isStreaming) {
48
+ resHeaders.set('Transfer-Encoding', 'chunked');
49
+ resHeaders.append('Vary', 'trpc-batch-mode');
50
+ const stream = new ReadableStream({
51
+ start (c) {
52
+ controller = c;
53
+ }
54
+ });
55
+ const response = new Response(stream, {
56
+ status,
57
+ headers: resHeaders
58
+ });
59
+ resolve(response);
60
+ encoder = new TextEncoder();
61
+ formatter = getBatchStreamFormatter();
62
+ isStream = true;
63
+ }
64
+ };
65
+ const unstable_onChunk = ([index, string])=>{
66
+ if (index === -1) {
67
+ // full response, no streaming
68
+ const response = new Response(string || null, {
69
+ status,
70
+ headers: resHeaders
71
+ });
72
+ resolve(response);
73
+ } else {
74
+ controller.enqueue(encoder.encode(formatter(index, string)));
75
+ }
76
+ };
77
+ resolveHTTPResponse({
26
78
  req,
27
79
  createContext,
28
80
  path,
@@ -34,25 +86,20 @@ async function fetchRequestHandler(opts) {
34
86
  ...o,
35
87
  req: opts.req
36
88
  });
89
+ },
90
+ unstable_onHead,
91
+ unstable_onChunk
92
+ }).then(()=>{
93
+ if (isStream) {
94
+ controller.enqueue(encoder.encode(formatter.end()));
95
+ controller.close();
37
96
  }
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);
97
+ }).catch(()=>{
98
+ if (isStream) {
99
+ controller.close();
49
100
  }
50
- }
51
- const res = new Response(result.body, {
52
- status: result.status,
53
- headers: resHeaders
54
101
  });
55
- return res;
102
+ return promise;
56
103
  }
57
104
 
58
105
  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-071d36b5.js');
8
8
  require('../index-4a823936.js');
9
9
  require('../codes-0eeb600d.js');
10
- require('../resolveHTTPResponse-9523b4e3.js');
10
+ require('../resolveHTTPResponse-1f03fdfd.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-bb12529f.mjs';
4
4
  import '../index-044a193b.mjs';
5
5
  import '../codes-24aa1ce1.mjs';
6
- import '../resolveHTTPResponse-4e576698.mjs';
6
+ import '../resolveHTTPResponse-dd3677b3.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) {