@trpc/server 11.0.0-rc.361 → 11.0.0-rc.362

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 (173) hide show
  1. package/dist/@trpc/server/http.d.ts +7 -5
  2. package/dist/@trpc/server/http.d.ts.map +1 -1
  3. package/dist/@trpc/server/index.d.ts +1 -2
  4. package/dist/@trpc/server/index.d.ts.map +1 -1
  5. package/dist/adapters/aws-lambda/getPlanner.d.ts +13 -0
  6. package/dist/adapters/aws-lambda/getPlanner.d.ts.map +1 -0
  7. package/dist/adapters/aws-lambda/getPlanner.js +143 -0
  8. package/dist/adapters/aws-lambda/getPlanner.mjs +141 -0
  9. package/dist/adapters/aws-lambda/index.d.ts +12 -9
  10. package/dist/adapters/aws-lambda/index.d.ts.map +1 -1
  11. package/dist/adapters/aws-lambda/index.js +7 -76
  12. package/dist/adapters/aws-lambda/index.mjs +9 -72
  13. package/dist/adapters/express.js +1 -0
  14. package/dist/adapters/express.mjs +1 -0
  15. package/dist/adapters/fastify/fastifyRequestHandler.d.ts +19 -2
  16. package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
  17. package/dist/adapters/fastify/fastifyRequestHandler.js +12 -63
  18. package/dist/adapters/fastify/fastifyRequestHandler.mjs +13 -64
  19. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +1 -1
  20. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +1 -1
  21. package/dist/adapters/fetch/fetchRequestHandler.d.ts +2 -2
  22. package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -1
  23. package/dist/adapters/fetch/fetchRequestHandler.js +28 -85
  24. package/dist/adapters/fetch/fetchRequestHandler.mjs +29 -86
  25. package/dist/adapters/fetch/types.d.ts +2 -2
  26. package/dist/adapters/fetch/types.d.ts.map +1 -1
  27. package/dist/adapters/next.js +1 -1
  28. package/dist/adapters/next.mjs +1 -1
  29. package/dist/adapters/node-http/incomingMessageToRequest.d.ts +18 -0
  30. package/dist/adapters/node-http/incomingMessageToRequest.d.ts.map +1 -0
  31. package/dist/adapters/node-http/incomingMessageToRequest.js +71 -0
  32. package/dist/adapters/node-http/incomingMessageToRequest.mjs +69 -0
  33. package/dist/adapters/node-http/index.d.ts +1 -0
  34. package/dist/adapters/node-http/index.d.ts.map +1 -1
  35. package/dist/adapters/node-http/index.js +2 -0
  36. package/dist/adapters/node-http/index.mjs +1 -0
  37. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts +1 -1
  38. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
  39. package/dist/adapters/node-http/nodeHTTPRequestHandler.js +27 -70
  40. package/dist/adapters/node-http/nodeHTTPRequestHandler.mjs +28 -71
  41. package/dist/adapters/node-http/types.d.ts +7 -8
  42. package/dist/adapters/node-http/types.d.ts.map +1 -1
  43. package/dist/adapters/ws.js +1 -1
  44. package/dist/adapters/ws.mjs +1 -1
  45. package/dist/bundle-analysis.json +180 -277
  46. package/dist/http.js +4 -2
  47. package/dist/http.mjs +2 -1
  48. package/dist/index.js +2 -4
  49. package/dist/index.mjs +1 -2
  50. package/dist/unstable-core-do-not-import/http/contentType.d.ts +8 -20
  51. package/dist/unstable-core-do-not-import/http/contentType.d.ts.map +1 -1
  52. package/dist/unstable-core-do-not-import/http/contentType.js +180 -0
  53. package/dist/unstable-core-do-not-import/http/contentType.mjs +178 -0
  54. package/dist/unstable-core-do-not-import/http/contentTypeParsers.d.ts +14 -0
  55. package/dist/unstable-core-do-not-import/http/contentTypeParsers.d.ts.map +1 -0
  56. package/dist/unstable-core-do-not-import/http/contentTypeParsers.js +14 -0
  57. package/dist/unstable-core-do-not-import/http/contentTypeParsers.mjs +12 -0
  58. package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.d.ts +1 -1
  59. package/dist/unstable-core-do-not-import/http/getHTTPStatusCode.d.ts.map +1 -1
  60. package/dist/unstable-core-do-not-import/http/resolveHTTPResponse.d.ts +7 -43
  61. package/dist/unstable-core-do-not-import/http/resolveHTTPResponse.d.ts.map +1 -1
  62. package/dist/unstable-core-do-not-import/http/resolveHTTPResponse.js +119 -134
  63. package/dist/unstable-core-do-not-import/http/resolveHTTPResponse.mjs +119 -134
  64. package/dist/unstable-core-do-not-import/http/types.d.ts +25 -27
  65. package/dist/unstable-core-do-not-import/http/types.d.ts.map +1 -1
  66. package/dist/unstable-core-do-not-import/initTRPC.d.ts +1 -1
  67. package/dist/unstable-core-do-not-import/procedureBuilder.d.ts +1 -3
  68. package/dist/unstable-core-do-not-import/procedureBuilder.d.ts.map +1 -1
  69. package/dist/unstable-core-do-not-import/procedureBuilder.js +0 -2
  70. package/dist/unstable-core-do-not-import/procedureBuilder.mjs +1 -2
  71. package/dist/unstable-core-do-not-import/rootConfig.d.ts +0 -9
  72. package/dist/unstable-core-do-not-import/rootConfig.d.ts.map +1 -1
  73. package/dist/unstable-core-do-not-import/utils.d.ts +3 -0
  74. package/dist/unstable-core-do-not-import/utils.d.ts.map +1 -1
  75. package/dist/unstable-core-do-not-import/utils.js +2 -0
  76. package/dist/unstable-core-do-not-import/utils.mjs +2 -1
  77. package/dist/unstable-core-do-not-import.d.ts +9 -3
  78. package/dist/unstable-core-do-not-import.d.ts.map +1 -1
  79. package/dist/unstable-core-do-not-import.js +11 -7
  80. package/dist/unstable-core-do-not-import.mjs +7 -5
  81. package/package.json +3 -13
  82. package/src/@trpc/server/http.ts +7 -12
  83. package/src/@trpc/server/index.ts +0 -3
  84. package/src/adapters/aws-lambda/getPlanner.ts +191 -0
  85. package/src/adapters/aws-lambda/index.ts +43 -107
  86. package/src/adapters/express.ts +1 -1
  87. package/src/adapters/fastify/fastifyRequestHandler.ts +40 -89
  88. package/src/adapters/fastify/fastifyTRPCPlugin.ts +1 -1
  89. package/src/adapters/fetch/fetchRequestHandler.ts +35 -111
  90. package/src/adapters/fetch/types.ts +4 -2
  91. package/src/adapters/next.ts +1 -1
  92. package/src/adapters/node-http/incomingMessageToRequest.ts +94 -0
  93. package/src/adapters/node-http/index.ts +1 -0
  94. package/src/adapters/node-http/nodeHTTPRequestHandler.ts +31 -97
  95. package/src/adapters/node-http/types.ts +27 -37
  96. package/src/adapters/standalone.ts +1 -1
  97. package/src/unstable-core-do-not-import/http/contentType.ts +214 -22
  98. package/src/unstable-core-do-not-import/http/contentTypeParsers.ts +29 -0
  99. package/src/unstable-core-do-not-import/http/getHTTPStatusCode.ts +2 -2
  100. package/src/unstable-core-do-not-import/http/resolveHTTPResponse.ts +135 -210
  101. package/src/unstable-core-do-not-import/http/types.ts +25 -30
  102. package/src/unstable-core-do-not-import/procedureBuilder.ts +2 -4
  103. package/src/unstable-core-do-not-import/rootConfig.ts +0 -10
  104. package/src/unstable-core-do-not-import/utils.ts +4 -0
  105. package/src/unstable-core-do-not-import.ts +9 -3
  106. package/adapters/node-http/content-type/form-data/index.d.ts +0 -1
  107. package/adapters/node-http/content-type/form-data/index.js +0 -1
  108. package/adapters/node-http/content-type/json/index.d.ts +0 -1
  109. package/adapters/node-http/content-type/json/index.js +0 -1
  110. package/dist/adapters/aws-lambda/content-type/json/index.d.ts +0 -10
  111. package/dist/adapters/aws-lambda/content-type/json/index.d.ts.map +0 -1
  112. package/dist/adapters/aws-lambda/content-type/json/index.js +0 -62
  113. package/dist/adapters/aws-lambda/content-type/json/index.mjs +0 -60
  114. package/dist/adapters/aws-lambda/utils.d.ts +0 -31
  115. package/dist/adapters/aws-lambda/utils.d.ts.map +0 -1
  116. package/dist/adapters/aws-lambda/utils.js +0 -111
  117. package/dist/adapters/aws-lambda/utils.mjs +0 -103
  118. package/dist/adapters/content-handlers/concurrentCache.d.ts +0 -7
  119. package/dist/adapters/content-handlers/concurrentCache.d.ts.map +0 -1
  120. package/dist/adapters/content-handlers/concurrentCache.js +0 -17
  121. package/dist/adapters/content-handlers/concurrentCache.mjs +0 -15
  122. package/dist/adapters/content-handlers/selectContentHandlerOrUnsupportedMediaType.d.ts +0 -10
  123. package/dist/adapters/content-handlers/selectContentHandlerOrUnsupportedMediaType.d.ts.map +0 -1
  124. package/dist/adapters/content-handlers/selectContentHandlerOrUnsupportedMediaType.js +0 -33
  125. package/dist/adapters/content-handlers/selectContentHandlerOrUnsupportedMediaType.mjs +0 -31
  126. package/dist/adapters/fastify/content-type/json/index.d.ts +0 -8
  127. package/dist/adapters/fastify/content-type/json/index.d.ts.map +0 -1
  128. package/dist/adapters/fastify/content-type/json/index.js +0 -62
  129. package/dist/adapters/fastify/content-type/json/index.mjs +0 -60
  130. package/dist/adapters/fastify/types.d.ts +0 -11
  131. package/dist/adapters/fastify/types.d.ts.map +0 -1
  132. package/dist/adapters/fetch/content-type/json/index.d.ts +0 -9
  133. package/dist/adapters/fetch/content-type/json/index.d.ts.map +0 -1
  134. package/dist/adapters/fetch/content-type/json/index.js +0 -55
  135. package/dist/adapters/fetch/content-type/json/index.mjs +0 -53
  136. package/dist/adapters/node-http/content-type/form-data/index.d.ts +0 -5
  137. package/dist/adapters/node-http/content-type/form-data/index.d.ts.map +0 -1
  138. package/dist/adapters/node-http/content-type/form-data/index.js +0 -32
  139. package/dist/adapters/node-http/content-type/form-data/index.mjs +0 -30
  140. package/dist/adapters/node-http/content-type/json/getPostBody.d.ts +0 -7
  141. package/dist/adapters/node-http/content-type/json/getPostBody.d.ts.map +0 -1
  142. package/dist/adapters/node-http/content-type/json/getPostBody.js +0 -45
  143. package/dist/adapters/node-http/content-type/json/getPostBody.mjs +0 -43
  144. package/dist/adapters/node-http/content-type/json/index.d.ts +0 -5
  145. package/dist/adapters/node-http/content-type/json/index.d.ts.map +0 -1
  146. package/dist/adapters/node-http/content-type/json/index.js +0 -68
  147. package/dist/adapters/node-http/content-type/json/index.mjs +0 -66
  148. package/dist/adapters/node-http/content-type/octet/index.d.ts +0 -5
  149. package/dist/adapters/node-http/content-type/octet/index.d.ts.map +0 -1
  150. package/dist/adapters/node-http/content-type/octet/index.js +0 -19
  151. package/dist/adapters/node-http/content-type/octet/index.mjs +0 -17
  152. package/dist/adapters/node-http/content-type/types.d.ts +0 -8
  153. package/dist/adapters/node-http/content-type/types.d.ts.map +0 -1
  154. package/dist/unstable-core-do-not-import/contentTypeParsers.d.ts +0 -16
  155. package/dist/unstable-core-do-not-import/contentTypeParsers.d.ts.map +0 -1
  156. package/dist/unstable-core-do-not-import/contentTypeParsers.js +0 -23
  157. package/dist/unstable-core-do-not-import/contentTypeParsers.mjs +0 -21
  158. package/dist/unstable-core-do-not-import/http/index.d.ts +0 -11
  159. package/dist/unstable-core-do-not-import/http/index.d.ts.map +0 -1
  160. package/src/adapters/aws-lambda/content-type/json/index.ts +0 -108
  161. package/src/adapters/aws-lambda/utils.ts +0 -170
  162. package/src/adapters/content-handlers/concurrentCache.ts +0 -16
  163. package/src/adapters/content-handlers/selectContentHandlerOrUnsupportedMediaType.ts +0 -45
  164. package/src/adapters/fastify/content-type/json/index.ts +0 -106
  165. package/src/adapters/fastify/types.ts +0 -22
  166. package/src/adapters/fetch/content-type/json/index.ts +0 -90
  167. package/src/adapters/node-http/content-type/form-data/index.ts +0 -37
  168. package/src/adapters/node-http/content-type/json/getPostBody.ts +0 -49
  169. package/src/adapters/node-http/content-type/json/index.ts +0 -100
  170. package/src/adapters/node-http/content-type/octet/index.ts +0 -27
  171. package/src/adapters/node-http/content-type/types.ts +0 -19
  172. package/src/unstable-core-do-not-import/contentTypeParsers.ts +0 -37
  173. package/src/unstable-core-do-not-import/http/index.ts +0 -28
@@ -0,0 +1,69 @@
1
+ import { TRPCError } from '../../unstable-core-do-not-import/error/TRPCError.mjs';
2
+ import '../../unstable-core-do-not-import/rootConfig.mjs';
3
+
4
+ /**
5
+ * Convert an incoming message to a body stream with a max size
6
+ */ function incomingMessageToBodyStream(req, opts) {
7
+ let size = 0;
8
+ const maxBodySize = opts.maxBodySize;
9
+ let controller = null;
10
+ const stream = new ReadableStream({
11
+ start (c) {
12
+ controller = c;
13
+ },
14
+ async pull (c) {
15
+ const chunk = req.read();
16
+ if (chunk) {
17
+ size += chunk.length;
18
+ }
19
+ if (maxBodySize !== null && size > maxBodySize) {
20
+ controller.error(new TRPCError({
21
+ code: 'PAYLOAD_TOO_LARGE'
22
+ }));
23
+ return;
24
+ }
25
+ if (chunk === null) {
26
+ c.close();
27
+ return;
28
+ }
29
+ controller.enqueue(chunk);
30
+ },
31
+ cancel () {
32
+ req.destroy();
33
+ }
34
+ });
35
+ return stream;
36
+ }
37
+ const bodyMethods = [
38
+ 'POST',
39
+ 'PUT',
40
+ 'PATCH'
41
+ ];
42
+ /**
43
+ * Convert an [`IncomingMessage`](https://nodejs.org/api/http.html#class-httpincomingmessage) to a [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request)
44
+ */ function incomingMessageToRequest(req, opts) {
45
+ const ac = new AbortController();
46
+ const headers = new Headers(req.headers);
47
+ const url = `http://${headers.get('host')}${req.url}`;
48
+ req.once('aborted', ()=>ac.abort());
49
+ const init = {
50
+ headers,
51
+ method: req.method,
52
+ signal: ac.signal,
53
+ // @ts-expect-error this is fine
54
+ duplex: 'half'
55
+ };
56
+ if (req.method && bodyMethods.includes(req.method)) {
57
+ if (!('body' in req)) {
58
+ init.body = incomingMessageToBodyStream(req, opts);
59
+ } else if (typeof req.body === 'string') {
60
+ init.body = req.body;
61
+ } else if (req.body !== undefined) {
62
+ init.body = JSON.stringify(req.body);
63
+ }
64
+ }
65
+ const request = new Request(url, init);
66
+ return request;
67
+ }
68
+
69
+ export { incomingMessageToRequest };
@@ -1,3 +1,4 @@
1
1
  export * from './nodeHTTPRequestHandler';
2
2
  export * from './types';
3
+ export * from './incomingMessageToRequest';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/node-http/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/node-http/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,SAAS,CAAC;AACxB,cAAc,4BAA4B,CAAC"}
@@ -1,7 +1,9 @@
1
1
  'use strict';
2
2
 
3
3
  var nodeHTTPRequestHandler = require('./nodeHTTPRequestHandler.js');
4
+ var incomingMessageToRequest = require('./incomingMessageToRequest.js');
4
5
 
5
6
 
6
7
 
7
8
  exports.nodeHTTPRequestHandler = nodeHTTPRequestHandler.nodeHTTPRequestHandler;
9
+ exports.incomingMessageToRequest = incomingMessageToRequest.incomingMessageToRequest;
@@ -1 +1,2 @@
1
1
  export { nodeHTTPRequestHandler } from './nodeHTTPRequestHandler.mjs';
2
+ export { incomingMessageToRequest } from './incomingMessageToRequest.mjs';
@@ -7,7 +7,7 @@
7
7
  * import type { HTTPBaseHandlerOptions } from '@trpc/server/http'
8
8
  * ```
9
9
  */
10
- import type { AnyRouter } from '../../@trpc/server';
10
+ import { type AnyRouter } from '../../@trpc/server';
11
11
  import type { NodeHTTPRequest, NodeHTTPRequestHandlerOptions, NodeHTTPResponse } from './types';
12
12
  export declare function nodeHTTPRequestHandler<TRouter extends AnyRouter, TRequest extends NodeHTTPRequest, TResponse extends NodeHTTPResponse>(opts: NodeHTTPRequestHandlerOptions<TRouter, TRequest, TResponse>): Promise<void>;
13
13
  //# sourceMappingURL=nodeHTTPRequestHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodeHTTPRequestHandler.d.ts","sourceRoot":"","sources":["../../../src/adapters/node-http/nodeHTTPRequestHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAepD,OAAO,KAAK,EACV,eAAe,EACf,6BAA6B,EAC7B,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAEjB,wBAAsB,sBAAsB,CAC1C,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,eAAe,EAChC,SAAS,SAAS,gBAAgB,EAClC,IAAI,EAAE,6BAA6B,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,iBA6GlE"}
1
+ {"version":3,"file":"nodeHTTPRequestHandler.d.ts","sourceRoot":"","sources":["../../../src/adapters/node-http/nodeHTTPRequestHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAI7E,OAAO,KAAK,EACV,eAAe,EACf,6BAA6B,EAC7B,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAUjB,wBAAsB,sBAAsB,CAC1C,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,eAAe,EAChC,SAAS,SAAS,gBAAgB,EAClC,IAAI,EAAE,6BAA6B,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,iBA8ClE"}
@@ -1,12 +1,9 @@
1
1
  'use strict';
2
2
 
3
+ var TRPCError = require('../../unstable-core-do-not-import/error/TRPCError.js');
3
4
  var resolveHTTPResponse = require('../../unstable-core-do-not-import/http/resolveHTTPResponse.js');
4
- var batchStreamFormatter = require('../../unstable-core-do-not-import/http/batchStreamFormatter.js');
5
5
  require('../../unstable-core-do-not-import/rootConfig.js');
6
- var selectContentHandlerOrUnsupportedMediaType = require('../content-handlers/selectContentHandlerOrUnsupportedMediaType.js');
7
- var index$1 = require('./content-type/form-data/index.js');
8
- var index = require('./content-type/json/index.js');
9
- var index$2 = require('./content-type/octet/index.js');
6
+ var incomingMessageToRequest = require('./incomingMessageToRequest.js');
10
7
 
11
8
  /**
12
9
  * If you're making an adapter for tRPC and looking at this file for reference, you should import types and functions from `@trpc/server` and `@trpc/server/http`
@@ -16,12 +13,18 @@ var index$2 = require('./content-type/octet/index.js');
16
13
  * import type { AnyTRPCRouter } from '@trpc/server'
17
14
  * import type { HTTPBaseHandlerOptions } from '@trpc/server/http'
18
15
  * ```
19
- */ /* eslint-disable @typescript-eslint/no-non-null-assertion */ // @trpc/server
16
+ */ // @trpc/server
17
+ function assertAsyncIterable(value) {
18
+ if (!(Symbol.asyncIterator in value)) {
19
+ throw new Error('Expected AsyncIterable - are you using Node >= 18.0.0?');
20
+ }
21
+ }
20
22
  async function nodeHTTPRequestHandler(opts) {
21
23
  const handleViaMiddleware = opts.middleware ?? ((_req, _res, next)=>next());
22
24
  return handleViaMiddleware(opts.req, opts.res, async (err)=>{
23
- if (err) throw err;
24
- //
25
+ const req = incomingMessageToRequest.incomingMessageToRequest(opts.req, {
26
+ maxBodySize: opts.maxBodySize ?? null
27
+ });
25
28
  // Build tRPC dependencies
26
29
  const createContext = async (innerOpts)=>{
27
30
  return await opts.createContext?.({
@@ -29,78 +32,32 @@ async function nodeHTTPRequestHandler(opts) {
29
32
  ...innerOpts
30
33
  });
31
34
  };
32
- const query = opts.req.query ? new URLSearchParams(opts.req.query) : new URLSearchParams(opts.req.url.split('?')[1]);
33
- const req = {
34
- method: opts.req.method,
35
- headers: opts.req.headers,
36
- query
37
- };
38
- let isStream = false;
39
- let formatter;
40
- const unstable_onHead = (head, isStreaming)=>{
41
- if ('status' in head && (!opts.res.statusCode || opts.res.statusCode === 200)) {
42
- opts.res.statusCode = head.status;
43
- }
44
- for (const [key, value] of Object.entries(head.headers ?? {})){
45
- /* istanbul ignore if -- @preserve */ if (typeof value === 'undefined') {
46
- continue;
47
- }
48
- opts.res.setHeader(key, value);
49
- }
50
- if (isStreaming) {
51
- opts.res.setHeader('Transfer-Encoding', 'chunked');
52
- const vary = opts.res.getHeader('Vary');
53
- opts.res.setHeader('Vary', vary ? 'trpc-batch-mode, ' + vary : 'trpc-batch-mode');
54
- isStream = true;
55
- formatter = batchStreamFormatter.getBatchStreamFormatter();
56
- opts.res.flushHeaders();
57
- }
58
- };
59
- const unstable_onChunk = ([index, string])=>{
60
- if (index === -1) {
61
- /**
62
- * Full response, no streaming. This can happen
63
- * - if the response is an error
64
- * - if response is empty (HEAD request)
65
- */ opts.res.end(string);
66
- } else {
67
- opts.res.write(formatter(index, string));
68
- opts.res.flush?.();
69
- }
70
- };
71
- const [contentTypeHandler, unsupportedMediaTypeError] = selectContentHandlerOrUnsupportedMediaType.selectContentHandlerOrUnsupportedMediaType([
72
- index.getNodeHTTPJSONContentTypeHandler(),
73
- index$1.getFormDataContentTypeHandler(),
74
- index$2.getOctetContentTypeHandler()
75
- ], {
76
- ...opts,
77
- query
78
- });
79
- await resolveHTTPResponse.resolveHTTPResponse({
35
+ const response = await resolveHTTPResponse.resolveResponse({
80
36
  ...opts,
81
37
  req,
38
+ error: err ? TRPCError.getTRPCErrorFromUnknown(err) : null,
82
39
  createContext,
83
- error: unsupportedMediaTypeError,
84
40
  onError (o) {
85
41
  opts?.onError?.({
86
42
  ...o,
87
43
  req: opts.req
88
44
  });
89
- },
90
- async getInput (inputsOpts) {
91
- return await contentTypeHandler?.getInputs({
92
- ...opts,
93
- query
94
- }, inputsOpts);
95
- },
96
- unstable_onHead,
97
- unstable_onChunk
45
+ }
98
46
  });
99
- if (isStream) {
100
- opts.res.write(formatter.end());
101
- opts.res.end();
47
+ if (opts.res.statusCode === 200) {
48
+ // if the status code is set, we assume that it's been manually overridden
49
+ opts.res.statusCode = response.status;
50
+ }
51
+ for (const [key, value] of response.headers){
52
+ opts.res.setHeader(key, value);
53
+ }
54
+ if (response.body) {
55
+ assertAsyncIterable(response.body);
56
+ for await (const chunk of response.body){
57
+ opts.res.write(chunk);
58
+ }
102
59
  }
103
- return opts.res;
60
+ opts.res.end();
104
61
  });
105
62
  }
106
63
 
@@ -1,10 +1,7 @@
1
- import { resolveHTTPResponse } from '../../unstable-core-do-not-import/http/resolveHTTPResponse.mjs';
2
- import { getBatchStreamFormatter } from '../../unstable-core-do-not-import/http/batchStreamFormatter.mjs';
1
+ import { getTRPCErrorFromUnknown } from '../../unstable-core-do-not-import/error/TRPCError.mjs';
2
+ import { resolveResponse } from '../../unstable-core-do-not-import/http/resolveHTTPResponse.mjs';
3
3
  import '../../unstable-core-do-not-import/rootConfig.mjs';
4
- import { selectContentHandlerOrUnsupportedMediaType } from '../content-handlers/selectContentHandlerOrUnsupportedMediaType.mjs';
5
- import { getFormDataContentTypeHandler } from './content-type/form-data/index.mjs';
6
- import { getNodeHTTPJSONContentTypeHandler } from './content-type/json/index.mjs';
7
- import { getOctetContentTypeHandler } from './content-type/octet/index.mjs';
4
+ import { incomingMessageToRequest } from './incomingMessageToRequest.mjs';
8
5
 
9
6
  /**
10
7
  * If you're making an adapter for tRPC and looking at this file for reference, you should import types and functions from `@trpc/server` and `@trpc/server/http`
@@ -14,12 +11,18 @@ import { getOctetContentTypeHandler } from './content-type/octet/index.mjs';
14
11
  * import type { AnyTRPCRouter } from '@trpc/server'
15
12
  * import type { HTTPBaseHandlerOptions } from '@trpc/server/http'
16
13
  * ```
17
- */ /* eslint-disable @typescript-eslint/no-non-null-assertion */ // @trpc/server
14
+ */ // @trpc/server
15
+ function assertAsyncIterable(value) {
16
+ if (!(Symbol.asyncIterator in value)) {
17
+ throw new Error('Expected AsyncIterable - are you using Node >= 18.0.0?');
18
+ }
19
+ }
18
20
  async function nodeHTTPRequestHandler(opts) {
19
21
  const handleViaMiddleware = opts.middleware ?? ((_req, _res, next)=>next());
20
22
  return handleViaMiddleware(opts.req, opts.res, async (err)=>{
21
- if (err) throw err;
22
- //
23
+ const req = incomingMessageToRequest(opts.req, {
24
+ maxBodySize: opts.maxBodySize ?? null
25
+ });
23
26
  // Build tRPC dependencies
24
27
  const createContext = async (innerOpts)=>{
25
28
  return await opts.createContext?.({
@@ -27,78 +30,32 @@ async function nodeHTTPRequestHandler(opts) {
27
30
  ...innerOpts
28
31
  });
29
32
  };
30
- const query = opts.req.query ? new URLSearchParams(opts.req.query) : new URLSearchParams(opts.req.url.split('?')[1]);
31
- const req = {
32
- method: opts.req.method,
33
- headers: opts.req.headers,
34
- query
35
- };
36
- let isStream = false;
37
- let formatter;
38
- const unstable_onHead = (head, isStreaming)=>{
39
- if ('status' in head && (!opts.res.statusCode || opts.res.statusCode === 200)) {
40
- opts.res.statusCode = head.status;
41
- }
42
- for (const [key, value] of Object.entries(head.headers ?? {})){
43
- /* istanbul ignore if -- @preserve */ if (typeof value === 'undefined') {
44
- continue;
45
- }
46
- opts.res.setHeader(key, value);
47
- }
48
- if (isStreaming) {
49
- opts.res.setHeader('Transfer-Encoding', 'chunked');
50
- const vary = opts.res.getHeader('Vary');
51
- opts.res.setHeader('Vary', vary ? 'trpc-batch-mode, ' + vary : 'trpc-batch-mode');
52
- isStream = true;
53
- formatter = getBatchStreamFormatter();
54
- opts.res.flushHeaders();
55
- }
56
- };
57
- const unstable_onChunk = ([index, string])=>{
58
- if (index === -1) {
59
- /**
60
- * Full response, no streaming. This can happen
61
- * - if the response is an error
62
- * - if response is empty (HEAD request)
63
- */ opts.res.end(string);
64
- } else {
65
- opts.res.write(formatter(index, string));
66
- opts.res.flush?.();
67
- }
68
- };
69
- const [contentTypeHandler, unsupportedMediaTypeError] = selectContentHandlerOrUnsupportedMediaType([
70
- getNodeHTTPJSONContentTypeHandler(),
71
- getFormDataContentTypeHandler(),
72
- getOctetContentTypeHandler()
73
- ], {
74
- ...opts,
75
- query
76
- });
77
- await resolveHTTPResponse({
33
+ const response = await resolveResponse({
78
34
  ...opts,
79
35
  req,
36
+ error: err ? getTRPCErrorFromUnknown(err) : null,
80
37
  createContext,
81
- error: unsupportedMediaTypeError,
82
38
  onError (o) {
83
39
  opts?.onError?.({
84
40
  ...o,
85
41
  req: opts.req
86
42
  });
87
- },
88
- async getInput (inputsOpts) {
89
- return await contentTypeHandler?.getInputs({
90
- ...opts,
91
- query
92
- }, inputsOpts);
93
- },
94
- unstable_onHead,
95
- unstable_onChunk
43
+ }
96
44
  });
97
- if (isStream) {
98
- opts.res.write(formatter.end());
99
- opts.res.end();
45
+ if (opts.res.statusCode === 200) {
46
+ // if the status code is set, we assume that it's been manually overridden
47
+ opts.res.statusCode = response.status;
48
+ }
49
+ for (const [key, value] of response.headers){
50
+ opts.res.setHeader(key, value);
51
+ }
52
+ if (response.body) {
53
+ assertAsyncIterable(response.body);
54
+ for await (const chunk of response.body){
55
+ opts.res.write(chunk);
56
+ }
100
57
  }
101
- return opts.res;
58
+ opts.res.end();
102
59
  });
103
60
  }
104
61
 
@@ -9,7 +9,7 @@
9
9
  * ```
10
10
  */
11
11
  import type * as http from 'http';
12
- import type { AnyRouter, CreateContextCallback, inferRouterContext, WrapCreateContext } from '../../@trpc/server';
12
+ import type { AnyRouter, CreateContextCallback, inferRouterContext } from '../../@trpc/server';
13
13
  import type { HTTPBaseHandlerOptions, TRPCRequestInfo } from '../../@trpc/server/http';
14
14
  import type { MaybePromise } from '../../unstable-core-do-not-import';
15
15
  interface ParsedQs {
@@ -30,12 +30,12 @@ export type NodeHTTPResponse = http.ServerResponse & {
30
30
  */
31
31
  flush?: () => void;
32
32
  };
33
- export type NodeHTTPConditionCreateContextOption<TRouter extends AnyRouter, TRequest, TResponse> = CreateContextCallback<inferRouterContext<TRouter>, NodeHTTPCreateContextFn<TRouter, TRequest, TResponse>>;
33
+ export type NodeHTTPCreateContextOption<TRouter extends AnyRouter, TRequest, TResponse> = CreateContextCallback<inferRouterContext<TRouter>, NodeHTTPCreateContextFn<TRouter, TRequest, TResponse>>;
34
34
  /**
35
35
  * @internal
36
36
  */
37
37
  type ConnectMiddleware<TRequest extends NodeHTTPRequest = NodeHTTPRequest, TResponse extends NodeHTTPResponse = NodeHTTPResponse> = (req: TRequest, res: TResponse, next: (err?: any) => any) => void;
38
- interface CoreNodeHTTPHandlerOptions<TRouter extends AnyRouter, TRequest extends NodeHTTPRequest, TResponse extends NodeHTTPResponse> extends HTTPBaseHandlerOptions<TRouter, TRequest> {
38
+ export type NodeHTTPHandlerOptions<TRouter extends AnyRouter, TRequest extends NodeHTTPRequest, TResponse extends NodeHTTPResponse> = HTTPBaseHandlerOptions<TRouter, TRequest> & NodeHTTPCreateContextOption<TRouter, TRequest, TResponse> & {
39
39
  /**
40
40
  * By default, http `OPTIONS` requests are not handled, and CORS headers are not returned.
41
41
  *
@@ -52,15 +52,14 @@ interface CoreNodeHTTPHandlerOptions<TRouter extends AnyRouter, TRequest extends
52
52
  * You can also use it for other needs which a connect/node.js compatible middleware can solve,
53
53
  * though you might wish to consider an alternative solution like the Express adapter if your needs are complex.
54
54
  */
55
- middleware?: ConnectMiddleware<TRequest, TResponse>;
55
+ middleware?: ConnectMiddleware;
56
56
  maxBodySize?: number;
57
- }
58
- export type NodeHTTPHandlerOptions<TRouter extends AnyRouter, TRequest extends NodeHTTPRequest, TResponse extends NodeHTTPResponse> = CoreNodeHTTPHandlerOptions<TRouter, TRequest, TResponse> & NodeHTTPConditionCreateContextOption<TRouter, TRequest, TResponse>;
59
- export type NodeHTTPRequestHandlerOptions<TRouter extends AnyRouter, TRequest extends NodeHTTPRequest, TResponse extends NodeHTTPResponse> = CoreNodeHTTPHandlerOptions<TRouter, TRequest, TResponse> & WrapCreateContext<NodeHTTPCreateContextFn<TRouter, TRequest, TResponse>> & {
57
+ };
58
+ export type NodeHTTPRequestHandlerOptions<TRouter extends AnyRouter, TRequest extends NodeHTTPRequest, TResponse extends NodeHTTPResponse> = {
60
59
  req: TRequest;
61
60
  res: TResponse;
62
61
  path: string;
63
- };
62
+ } & NodeHTTPHandlerOptions<TRouter, TRequest, TResponse>;
64
63
  export type NodeHTTPCreateContextFnOptions<TRequest, TResponse> = {
65
64
  req: TRequest;
66
65
  res: TResponse;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/node-http/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,KAAK,IAAI,MAAM,MAAM,CAAC;AAElC,OAAO,KAAK,EACV,SAAS,EACT,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EACV,sBAAsB,EACtB,eAAe,EAChB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEtE,UAAU,QAAQ;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAAC;CACtE;AAED,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG;IACnD,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,GAAG;IACnD;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,oCAAoC,CAC9C,OAAO,SAAS,SAAS,EACzB,QAAQ,EACR,SAAS,IACP,qBAAqB,CACvB,kBAAkB,CAAC,OAAO,CAAC,EAC3B,uBAAuB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CACtD,CAAC;AAEF;;GAEG;AACH,KAAK,iBAAiB,CACpB,QAAQ,SAAS,eAAe,GAAG,eAAe,EAClD,SAAS,SAAS,gBAAgB,GAAG,gBAAgB,IACnD,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,GAAG,KAAK,IAAI,CAAC;AAEtE,UAAU,0BAA0B,CAClC,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,eAAe,EAChC,SAAS,SAAS,gBAAgB,CAClC,SAAQ,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC;IACjD;;;;;;;;;;;;;;;OAeG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,MAAM,sBAAsB,CAChC,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,eAAe,EAChC,SAAS,SAAS,gBAAgB,IAChC,0BAA0B,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,GAC1D,oCAAoC,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAGrE,MAAM,MAAM,6BAA6B,CACvC,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,eAAe,EAChC,SAAS,SAAS,gBAAgB,IAChC,0BAA0B,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,GAC1D,iBAAiB,CAAC,uBAAuB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,GAAG;IACzE,GAAG,EAAE,QAAQ,CAAC;IACd,GAAG,EAAE,SAAS,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEJ,MAAM,MAAM,8BAA8B,CAAC,QAAQ,EAAE,SAAS,IAAI;IAChE,GAAG,EAAE,QAAQ,CAAC;IACd,GAAG,EAAE,SAAS,CAAC;IACf,IAAI,EAAE,eAAe,CAAC;CACvB,CAAC;AACF,MAAM,MAAM,uBAAuB,CACjC,OAAO,SAAS,SAAS,EACzB,QAAQ,EACR,SAAS,IACP,CACF,IAAI,EAAE,8BAA8B,CAAC,QAAQ,EAAE,SAAS,CAAC,KACtD,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/node-http/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,KAAK,IAAI,MAAM,MAAM,CAAC;AAElC,OAAO,KAAK,EACV,SAAS,EACT,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EACV,sBAAsB,EACtB,eAAe,EAChB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEtE,UAAU,QAAQ;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAAC;CACtE;AAED,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG;IACnD,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,GAAG;IACnD;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,2BAA2B,CACrC,OAAO,SAAS,SAAS,EACzB,QAAQ,EACR,SAAS,IACP,qBAAqB,CACvB,kBAAkB,CAAC,OAAO,CAAC,EAC3B,uBAAuB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CACtD,CAAC;AAEF;;GAEG;AACH,KAAK,iBAAiB,CACpB,QAAQ,SAAS,eAAe,GAAG,eAAe,EAClD,SAAS,SAAS,gBAAgB,GAAG,gBAAgB,IACnD,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,GAAG,KAAK,IAAI,CAAC;AAEtE,MAAM,MAAM,sBAAsB,CAChC,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,eAAe,EAChC,SAAS,SAAS,gBAAgB,IAChC,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAC3C,2BAA2B,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,GAAG;IAC1D;;;;;;;;;;;;;;;OAeG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEJ,MAAM,MAAM,6BAA6B,CACvC,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,eAAe,EAChC,SAAS,SAAS,gBAAgB,IAChC;IACF,GAAG,EAAE,QAAQ,CAAC;IACd,GAAG,EAAE,SAAS,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAEzD,MAAM,MAAM,8BAA8B,CAAC,QAAQ,EAAE,SAAS,IAAI;IAChE,GAAG,EAAE,QAAQ,CAAC;IACd,GAAG,EAAE,SAAS,CAAC;IACf,IAAI,EAAE,eAAe,CAAC;CACvB,CAAC;AACF,MAAM,MAAM,uBAAuB,CACjC,OAAO,SAAS,SAAS,EACzB,QAAQ,EACR,SAAS,IACP,CACF,IAAI,EAAE,8BAA8B,CAAC,QAAQ,EAAE,SAAS,CAAC,KACtD,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var getErrorShape = require('../unstable-core-do-not-import/error/getErrorShape.js');
4
3
  var TRPCError = require('../unstable-core-do-not-import/error/TRPCError.js');
4
+ var getErrorShape = require('../unstable-core-do-not-import/error/getErrorShape.js');
5
5
  var parseTRPCMessage = require('../unstable-core-do-not-import/rpc/parseTRPCMessage.js');
6
6
  var router = require('../unstable-core-do-not-import/router.js');
7
7
  var transformer = require('../unstable-core-do-not-import/transformer.js');
@@ -1,5 +1,5 @@
1
- import { getErrorShape } from '../unstable-core-do-not-import/error/getErrorShape.mjs';
2
1
  import { TRPCError, getTRPCErrorFromUnknown } from '../unstable-core-do-not-import/error/TRPCError.mjs';
2
+ import { getErrorShape } from '../unstable-core-do-not-import/error/getErrorShape.mjs';
3
3
  import { parseTRPCMessage } from '../unstable-core-do-not-import/rpc/parseTRPCMessage.mjs';
4
4
  import { callProcedure } from '../unstable-core-do-not-import/router.mjs';
5
5
  import { transformTRPCResponse } from '../unstable-core-do-not-import/transformer.mjs';