@trpc/server 10.0.0-alpha.20 → 10.0.0-alpha.23

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 (198) hide show
  1. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.d.ts +1 -0
  2. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.dev.js +90 -0
  3. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.js +7 -0
  4. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.cjs.prod.js +90 -0
  5. package/adapters/aws-lambda/dist/trpc-server-adapters-aws-lambda.esm.js +86 -0
  6. package/adapters/express/dist/trpc-server-adapters-express.cjs.dev.js +4 -4
  7. package/adapters/express/dist/trpc-server-adapters-express.cjs.prod.js +4 -4
  8. package/adapters/express/dist/trpc-server-adapters-express.esm.js +4 -4
  9. package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.dev.js +5 -5
  10. package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.prod.js +5 -5
  11. package/adapters/fastify/dist/trpc-server-adapters-fastify.esm.js +5 -5
  12. package/adapters/fastify/index.js +1 -1
  13. package/adapters/fetch/index.d.ts +1 -0
  14. package/adapters/fetch/index.js +1 -0
  15. package/adapters/next/dist/trpc-server-adapters-next.cjs.dev.js +4 -4
  16. package/adapters/next/dist/trpc-server-adapters-next.cjs.prod.js +4 -4
  17. package/adapters/next/dist/trpc-server-adapters-next.esm.js +4 -4
  18. package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.dev.js +4 -4
  19. package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.prod.js +4 -4
  20. package/adapters/node-http/dist/trpc-server-adapters-node-http.esm.js +4 -4
  21. package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.dev.js +4 -4
  22. package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.prod.js +4 -4
  23. package/adapters/standalone/dist/trpc-server-adapters-standalone.esm.js +4 -4
  24. package/adapters/ws/dist/trpc-server-adapters-ws.cjs.dev.js +2 -2
  25. package/adapters/ws/dist/trpc-server-adapters-ws.cjs.prod.js +2 -2
  26. package/adapters/ws/dist/trpc-server-adapters-ws.esm.js +2 -2
  27. package/dist/TRPCError-7971540a.mjs +65 -0
  28. package/dist/{transformTRPCResponse-43a869de.js → TRPCError-ddec3395.js} +18 -59
  29. package/dist/TRPCError.d.ts +3 -3
  30. package/dist/TRPCError.d.ts.map +1 -1
  31. package/dist/adapters/express.js +5 -5
  32. package/dist/adapters/express.mjs +5 -5
  33. package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
  34. package/dist/adapters/fastify/index.js +7 -8
  35. package/dist/adapters/fastify/index.mjs +6 -7
  36. package/dist/adapters/fetch/fetchRequestHandler.d.ts +8 -0
  37. package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -0
  38. package/dist/adapters/fetch/index.d.ts +3 -0
  39. package/dist/adapters/fetch/index.d.ts.map +1 -0
  40. package/dist/adapters/fetch/index.js +69 -0
  41. package/dist/adapters/fetch/index.mjs +65 -0
  42. package/dist/adapters/fetch/index.ts.js +1 -0
  43. package/dist/adapters/fetch/types.d.ts +21 -0
  44. package/dist/adapters/fetch/types.d.ts.map +1 -0
  45. package/dist/adapters/next.d.ts.map +1 -1
  46. package/dist/adapters/next.js +9 -10
  47. package/dist/adapters/next.mjs +8 -9
  48. package/dist/adapters/node-http/index.js +5 -5
  49. package/dist/adapters/node-http/index.mjs +5 -5
  50. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
  51. package/dist/adapters/node-http/types.d.ts +9 -7
  52. package/dist/adapters/node-http/types.d.ts.map +1 -1
  53. package/dist/adapters/standalone.d.ts.map +1 -1
  54. package/dist/adapters/standalone.js +11 -8
  55. package/dist/adapters/standalone.mjs +11 -7
  56. package/dist/adapters/ws.d.ts +4 -4
  57. package/dist/adapters/ws.d.ts.map +1 -1
  58. package/dist/adapters/ws.js +117 -80
  59. package/dist/adapters/ws.mjs +112 -75
  60. package/dist/assertNotBrowser.d.ts.map +1 -1
  61. package/dist/{codes-7a3d4f65.mjs → envelopes-1deb2fa7.mjs} +19 -1
  62. package/dist/{codes-7f46544e.js → envelopes-a953b930.js} +18 -0
  63. package/dist/http/index.d.ts +1 -1
  64. package/dist/http/internals/getHTTPStatusCode.d.ts +1 -0
  65. package/dist/http/internals/getHTTPStatusCode.d.ts.map +1 -1
  66. package/dist/http/internals/types.d.ts +5 -4
  67. package/dist/http/internals/types.d.ts.map +1 -1
  68. package/dist/http/resolveHTTPResponse.d.ts +1 -1
  69. package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
  70. package/dist/http/{ResponseMeta.d.ts → responseMeta.d.ts} +1 -1
  71. package/dist/http/responseMeta.d.ts.map +1 -0
  72. package/dist/index.d.ts +0 -1
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +45 -54
  75. package/dist/index.mjs +40 -47
  76. package/dist/internals/{BaseHandlerOptions.d.ts → baseHandlerOptions.d.ts} +2 -2
  77. package/dist/internals/{BaseHandlerOptions.d.ts.map → baseHandlerOptions.d.ts.map} +1 -1
  78. package/dist/internals/callProcedure.d.ts +2 -2
  79. package/dist/internals/callProcedure.d.ts.map +1 -1
  80. package/dist/internals/errors.d.ts +1 -0
  81. package/dist/internals/errors.d.ts.map +1 -1
  82. package/dist/internals/middlewares.d.ts +5 -2
  83. package/dist/internals/middlewares.d.ts.map +1 -1
  84. package/dist/internals/{OnErrorFunction.d.ts → onErrorFunction.d.ts} +1 -1
  85. package/dist/internals/{OnErrorFunction.d.ts.map → onErrorFunction.d.ts.map} +1 -1
  86. package/dist/internals/procedure.d.ts +20 -14
  87. package/dist/internals/procedure.d.ts.map +1 -1
  88. package/dist/internals/transformTRPCResponse.d.ts +4 -2
  89. package/dist/internals/transformTRPCResponse.d.ts.map +1 -1
  90. package/dist/{nodeHTTPRequestHandler-5fccb3bb.mjs → nodeHTTPRequestHandler-1cdb6383.mjs} +2 -3
  91. package/dist/{nodeHTTPRequestHandler-7d71ac09.js → nodeHTTPRequestHandler-848f07b5.js} +4 -5
  92. package/dist/observable/index.d.ts +5 -0
  93. package/dist/observable/index.d.ts.map +1 -0
  94. package/dist/observable/index.js +204 -0
  95. package/dist/observable/index.mjs +195 -0
  96. package/dist/observable/index.ts.js +1 -0
  97. package/dist/observable/internals/identity.d.ts +2 -0
  98. package/dist/observable/internals/identity.d.ts.map +1 -0
  99. package/dist/observable/internals/observableToPromise.d.ts +10 -0
  100. package/dist/observable/internals/observableToPromise.d.ts.map +1 -0
  101. package/dist/observable/internals/pipe.d.ts +4 -0
  102. package/dist/observable/internals/pipe.d.ts.map +1 -0
  103. package/dist/observable/observable.d.ts +5 -0
  104. package/dist/observable/observable.d.ts.map +1 -0
  105. package/dist/observable/operators/index.d.ts +4 -0
  106. package/dist/observable/operators/index.d.ts.map +1 -0
  107. package/dist/observable/operators/map.d.ts +3 -0
  108. package/dist/observable/operators/map.d.ts.map +1 -0
  109. package/dist/observable/operators/share.d.ts +6 -0
  110. package/dist/observable/operators/share.d.ts.map +1 -0
  111. package/dist/observable/operators/tap.d.ts +3 -0
  112. package/dist/observable/operators/tap.d.ts.map +1 -0
  113. package/dist/observable/types.d.ts +29 -0
  114. package/dist/observable/types.d.ts.map +1 -0
  115. package/dist/observable-137ea1bd.mjs +105 -0
  116. package/dist/observable-3aa4d911.js +108 -0
  117. package/dist/{resolveHTTPResponse-3292a84a.mjs → resolveHTTPResponse-54a79e6c.mjs} +18 -23
  118. package/dist/{resolveHTTPResponse-c3777a47.js → resolveHTTPResponse-ec3dccaa.js} +24 -29
  119. package/dist/router.d.ts +31 -27
  120. package/dist/router.d.ts.map +1 -1
  121. package/dist/rpc/codes.d.ts +2 -0
  122. package/dist/rpc/codes.d.ts.map +1 -1
  123. package/dist/rpc/envelopes.d.ts +61 -39
  124. package/dist/rpc/envelopes.d.ts.map +1 -1
  125. package/dist/rpc/index.js +7 -3
  126. package/dist/rpc/index.mjs +1 -1
  127. package/dist/subscription.d.ts +3 -52
  128. package/dist/subscription.d.ts.map +1 -1
  129. package/dist/subscription.js +44 -0
  130. package/dist/subscription.mjs +40 -0
  131. package/dist/subscription.ts.js +1 -0
  132. package/dist/transformTRPCResponse-333bed6c.js +56 -0
  133. package/dist/transformTRPCResponse-e0cba527.mjs +53 -0
  134. package/dist/types.d.ts +8 -0
  135. package/dist/types.d.ts.map +1 -1
  136. package/observable/index.d.ts +1 -0
  137. package/observable/index.js +1 -0
  138. package/package.json +30 -8
  139. package/rpc/dist/trpc-server-rpc.cjs.dev.js +1 -1
  140. package/rpc/dist/trpc-server-rpc.cjs.prod.js +1 -1
  141. package/rpc/dist/trpc-server-rpc.esm.js +1 -1
  142. package/src/TRPCError.ts +2 -2
  143. package/src/adapters/fastify/fastifyRequestHandler.ts +0 -1
  144. package/src/adapters/fastify/fastifyTRPCPlugin.ts +1 -1
  145. package/src/adapters/fetch/fetchRequestHandler.ts +61 -0
  146. package/src/adapters/fetch/index.ts +2 -0
  147. package/src/adapters/fetch/types.ts +28 -0
  148. package/src/adapters/next.ts +3 -5
  149. package/src/adapters/node-http/nodeHTTPRequestHandler.ts +0 -1
  150. package/src/adapters/node-http/types.ts +9 -7
  151. package/src/adapters/standalone.ts +10 -3
  152. package/src/adapters/ws.ts +115 -77
  153. package/src/assertNotBrowser.ts +1 -0
  154. package/src/http/index.ts +1 -1
  155. package/src/http/internals/getHTTPStatusCode.ts +1 -0
  156. package/src/http/internals/types.ts +5 -6
  157. package/src/http/resolveHTTPResponse.ts +20 -24
  158. package/src/http/{ResponseMeta.ts → responseMeta.ts} +0 -0
  159. package/src/index.ts +0 -1
  160. package/src/internals/{BaseHandlerOptions.ts → baseHandlerOptions.ts} +1 -1
  161. package/src/internals/callProcedure.ts +6 -3
  162. package/src/internals/errors.ts +20 -4
  163. package/src/internals/middlewares.ts +6 -2
  164. package/src/internals/{OnErrorFunction.ts → onErrorFunction.ts} +0 -0
  165. package/src/internals/procedure.ts +102 -42
  166. package/src/internals/transformTRPCResponse.ts +20 -15
  167. package/src/observable/index.ts +4 -0
  168. package/src/observable/internals/identity.ts +3 -0
  169. package/src/observable/internals/observableToPromise.ts +49 -0
  170. package/src/observable/internals/pipe.ts +22 -0
  171. package/src/observable/observable.test.ts +101 -0
  172. package/src/observable/observable.ts +75 -0
  173. package/src/observable/operators/index.ts +3 -0
  174. package/src/observable/operators/map.test.ts +92 -0
  175. package/src/observable/operators/map.ts +25 -0
  176. package/src/observable/operators/share.test.ts +60 -0
  177. package/src/observable/operators/share.ts +67 -0
  178. package/src/observable/operators/tap.ts +26 -0
  179. package/src/observable/types.ts +69 -0
  180. package/src/router.ts +96 -37
  181. package/src/rpc/codes.ts +1 -0
  182. package/src/rpc/envelopes.ts +87 -68
  183. package/src/subscription.ts +5 -123
  184. package/src/types.ts +7 -0
  185. package/dist/http/ResponseMeta.d.ts.map +0 -1
  186. package/dist/internals/wrapCallSafe.d.ts +0 -16
  187. package/dist/internals/wrapCallSafe.d.ts.map +0 -1
  188. package/dist/subscription-0d8a48ec.mjs +0 -133
  189. package/dist/subscription-41611bc2.js +0 -136
  190. package/dist/transformTRPCResponse-ff424ff4.mjs +0 -105
  191. package/src/internals/wrapCallSafe.ts +0 -19
  192. package/ws/dist/trpc-server-ws.cjs.d.ts +0 -1
  193. package/ws/dist/trpc-server-ws.cjs.dev.js +0 -15
  194. package/ws/dist/trpc-server-ws.cjs.js +0 -7
  195. package/ws/dist/trpc-server-ws.cjs.prod.js +0 -15
  196. package/ws/dist/trpc-server-ws.esm.js +0 -11
  197. package/ws/index.d.ts +0 -1
  198. package/ws/index.js +0 -1
@@ -0,0 +1,44 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var TRPCError = require('./TRPCError-ddec3395.js');
6
+ var observable = require('./observable-3aa4d911.js');
7
+
8
+ function subscriptionPullFactory(opts) {
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ let timer;
11
+ let stopped = false;
12
+
13
+ async function _pull(emit) {
14
+ /* istanbul ignore next */
15
+ if (stopped) {
16
+ return;
17
+ }
18
+
19
+ try {
20
+ await opts.pull(emit);
21
+ } catch (err
22
+ /* istanbul ignore next */
23
+ ) {
24
+ emit.error(TRPCError.getErrorFromUnknown(err));
25
+ }
26
+ /* istanbul ignore else */
27
+
28
+
29
+ if (!stopped) {
30
+ timer = setTimeout(() => _pull(emit), opts.intervalMs);
31
+ }
32
+ }
33
+
34
+ return observable.observable(emit => {
35
+ _pull(emit).catch(err => emit.error(TRPCError.getErrorFromUnknown(err)));
36
+
37
+ return () => {
38
+ clearTimeout(timer);
39
+ stopped = true;
40
+ };
41
+ });
42
+ }
43
+
44
+ exports.subscriptionPullFactory = subscriptionPullFactory;
@@ -0,0 +1,40 @@
1
+ import { a as getErrorFromUnknown } from './TRPCError-7971540a.mjs';
2
+ import { o as observable } from './observable-137ea1bd.mjs';
3
+
4
+ function subscriptionPullFactory(opts) {
5
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
+ let timer;
7
+ let stopped = false;
8
+
9
+ async function _pull(emit) {
10
+ /* istanbul ignore next */
11
+ if (stopped) {
12
+ return;
13
+ }
14
+
15
+ try {
16
+ await opts.pull(emit);
17
+ } catch (err
18
+ /* istanbul ignore next */
19
+ ) {
20
+ emit.error(getErrorFromUnknown(err));
21
+ }
22
+ /* istanbul ignore else */
23
+
24
+
25
+ if (!stopped) {
26
+ timer = setTimeout(() => _pull(emit), opts.intervalMs);
27
+ }
28
+ }
29
+
30
+ return observable(emit => {
31
+ _pull(emit).catch(err => emit.error(getErrorFromUnknown(err)));
32
+
33
+ return () => {
34
+ clearTimeout(timer);
35
+ stopped = true;
36
+ };
37
+ });
38
+ }
39
+
40
+ export { subscriptionPullFactory };
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,56 @@
1
+ 'use strict';
2
+
3
+ async function callProcedure(opts) {
4
+ const {
5
+ type,
6
+ path,
7
+ input
8
+ } = opts;
9
+ const caller = opts.router.createCaller(opts.ctx);
10
+
11
+ if (type === 'query') {
12
+ return caller.query(path, input);
13
+ }
14
+
15
+ if (type === 'mutation') {
16
+ return caller.mutation(path, input);
17
+ }
18
+
19
+ if (type === 'subscription') {
20
+ const sub = await caller.subscription(path, input);
21
+ return sub;
22
+ }
23
+ /* istanbul ignore next */
24
+
25
+
26
+ throw new Error(`Unknown procedure type ${type}`);
27
+ }
28
+
29
+ function transformTRPCResponseItem(router, item) {
30
+ if ('error' in item) {
31
+ return { ...item,
32
+ error: router._def.transformer.output.serialize(item.error)
33
+ };
34
+ }
35
+
36
+ if ('data' in item.result) {
37
+ return { ...item,
38
+ result: { ...item.result,
39
+ data: router._def.transformer.output.serialize(item.result.data)
40
+ }
41
+ };
42
+ }
43
+
44
+ return item;
45
+ }
46
+ /**
47
+ * Takes a unserialized `TRPCResponse` and serializes it with the router's transformers
48
+ **/
49
+
50
+
51
+ function transformTRPCResponse(router, itemOrItems) {
52
+ return Array.isArray(itemOrItems) ? itemOrItems.map(item => transformTRPCResponseItem(router, item)) : transformTRPCResponseItem(router, itemOrItems);
53
+ }
54
+
55
+ exports.callProcedure = callProcedure;
56
+ exports.transformTRPCResponse = transformTRPCResponse;
@@ -0,0 +1,53 @@
1
+ async function callProcedure(opts) {
2
+ const {
3
+ type,
4
+ path,
5
+ input
6
+ } = opts;
7
+ const caller = opts.router.createCaller(opts.ctx);
8
+
9
+ if (type === 'query') {
10
+ return caller.query(path, input);
11
+ }
12
+
13
+ if (type === 'mutation') {
14
+ return caller.mutation(path, input);
15
+ }
16
+
17
+ if (type === 'subscription') {
18
+ const sub = await caller.subscription(path, input);
19
+ return sub;
20
+ }
21
+ /* istanbul ignore next */
22
+
23
+
24
+ throw new Error(`Unknown procedure type ${type}`);
25
+ }
26
+
27
+ function transformTRPCResponseItem(router, item) {
28
+ if ('error' in item) {
29
+ return { ...item,
30
+ error: router._def.transformer.output.serialize(item.error)
31
+ };
32
+ }
33
+
34
+ if ('data' in item.result) {
35
+ return { ...item,
36
+ result: { ...item.result,
37
+ data: router._def.transformer.output.serialize(item.result.data)
38
+ }
39
+ };
40
+ }
41
+
42
+ return item;
43
+ }
44
+ /**
45
+ * Takes a unserialized `TRPCResponse` and serializes it with the router's transformers
46
+ **/
47
+
48
+
49
+ function transformTRPCResponse(router, itemOrItems) {
50
+ return Array.isArray(itemOrItems) ? itemOrItems.map(item => transformTRPCResponseItem(router, item)) : transformTRPCResponseItem(router, itemOrItems);
51
+ }
52
+
53
+ export { callProcedure as c, transformTRPCResponse as t };
package/dist/types.d.ts CHANGED
@@ -30,4 +30,12 @@ export declare type ThenArg<T> = T extends PromiseLike<infer U> ? ThenArg<U> : T
30
30
  * @public
31
31
  */
32
32
  export declare type Dict<T> = Record<string, T | undefined>;
33
+ /**
34
+ * @internal
35
+ * Creates a "lower-priority" type inference.
36
+ * https://github.com/microsoft/TypeScript/issues/14829#issuecomment-322267089
37
+ */
38
+ export declare type InferLast<T> = T & {
39
+ [K in keyof T]: T[K];
40
+ };
33
41
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,oBAAY,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAEpE;;GAEG;AACH,oBAAY,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAE5B;;GAEG;AACH,oBAAY,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC;KAClC,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GACvC,CAAC,CAAC,CAAC,CAAC,GACJ,CAAC,SAAS,MAAM,CAAC,GACjB,CAAC,CAAC,CAAC,CAAC,GACJ,KAAK;CACV,CAAC,CAAC;AAEH;;GAEG;AACH,oBAAY,QAAQ,CAClB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,OAAO,SAAS,MAAM,IACpB;KACD,CAAC,IAAI,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF;;GAEG;AACH,oBAAY,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;AAE5C;;GAEG;AACH,oBAAY,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAEzE;;GAEG;AACH,oBAAY,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,oBAAY,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAEpE;;GAEG;AACH,oBAAY,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAE5B;;GAEG;AACH,oBAAY,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC;KAClC,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GACvC,CAAC,CAAC,CAAC,CAAC,GACJ,CAAC,SAAS,MAAM,CAAC,GACjB,CAAC,CAAC,CAAC,CAAC,GACJ,KAAK;CACV,CAAC,CAAC;AAEH;;GAEG;AACH,oBAAY,QAAQ,CAClB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,OAAO,SAAS,MAAM,IACpB;KACD,CAAC,IAAI,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF;;GAEG;AACH,oBAAY,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;AAE5C;;GAEG;AACH,oBAAY,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAEzE;;GAEG;AACH,oBAAY,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;AAEpD;;;;GAIG;AACH,oBAAY,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC"}
@@ -0,0 +1 @@
1
+ export * from '../dist/observable';
@@ -0,0 +1 @@
1
+ module.exports = require('../dist/observable/index');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trpc/server",
3
- "version": "10.0.0-alpha.20",
3
+ "version": "10.0.0-alpha.23",
4
4
  "description": "tRPC Server",
5
5
  "author": "KATT",
6
6
  "license": "MIT",
@@ -12,7 +12,11 @@
12
12
  },
13
13
  "eslintConfig": {
14
14
  "rules": {
15
- "explicit-module-boundary-types": "off"
15
+ "explicit-module-boundary-types": "off",
16
+ "no-restricted-imports": [
17
+ "error",
18
+ "@trpc/server"
19
+ ]
16
20
  }
17
21
  },
18
22
  "scripts": {
@@ -58,41 +62,59 @@
58
62
  "require": "./dist/adapters/ws.js",
59
63
  "default": "./dist/adapters/ws.js"
60
64
  },
65
+ "./adapters/fetch": {
66
+ "import": "./dist/adapters/fetch/index.mjs",
67
+ "require": "./dist/adapters/fetch/index.js",
68
+ "default": "./dist/adapters/fetch/index.js"
69
+ },
61
70
  "./rpc": {
62
71
  "import": "./dist/rpc/index.mjs",
63
72
  "require": "./dist/rpc/index.js",
64
73
  "default": "./dist/rpc/index.js"
74
+ },
75
+ "./observable": {
76
+ "import": "./dist/observable/index.mjs",
77
+ "require": "./dist/observable/index.js",
78
+ "default": "./dist/observable/index.js"
79
+ },
80
+ "./subscription": {
81
+ "import": "./dist/subscription.mjs",
82
+ "require": "./dist/subscription.js",
83
+ "default": "./dist/subscription.js"
65
84
  }
66
85
  },
67
86
  "files": [
68
87
  "README.md",
69
88
  "dist",
70
89
  "adapters",
71
- "ws",
72
90
  "rpc",
91
+ "observable",
73
92
  "src"
74
93
  ],
75
94
  "publishConfig": {
76
95
  "access": "public"
77
96
  },
78
97
  "devDependencies": {
79
- "@testing-library/jest-dom": "^5.14.1",
80
- "@testing-library/react": "^12.0.0",
81
- "@testing-library/user-event": "^13.2.1",
98
+ "@cloudflare/workers-types": "^3.8.0",
99
+ "@fastify/websocket": "^5.0.0",
100
+ "@miniflare/core": "^2.4.0",
82
101
  "@types/express": "^4.17.12",
83
102
  "@types/hash-sum": "^1.0.0",
84
103
  "@types/ws": "^8.2.0",
85
104
  "abort-controller": "^3.0.0",
86
105
  "devalue": "^2.0.1",
106
+ "esbuild": "^0.14.38",
87
107
  "express": "^4.17.1",
88
108
  "fastify": "^3.27.1",
89
109
  "fastify-plugin": "^3.0.1",
90
110
  "fastify-websocket": "^4.0.0",
91
111
  "hash-sum": "^2.0.0",
92
112
  "jest": "^27.1.0",
113
+ "jest-environment-miniflare": "^2.4.0",
93
114
  "konn": "^0.7.0",
115
+ "miniflare": "^2.4.0",
94
116
  "myzod": "^1.3.1",
95
- "next": "^12.0.1",
117
+ "next": "^12.1.6",
96
118
  "node-fetch": "^2.6.1",
97
119
  "superstruct": "^0.15.2",
98
120
  "typescript": "4.4.4",
@@ -103,5 +125,5 @@
103
125
  "dependencies": {
104
126
  "tslib": "^2.1.0"
105
127
  },
106
- "gitHead": "b1d41d19a79b71045bf92dd6a5b8370a9f4f017c"
128
+ "gitHead": "c62ecdc84b32656b6ccb0f94188f34af4485ad58"
107
129
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var codes = require('../../dist/codes-33cef953.cjs.dev.js');
5
+ var codes = require('../../dist/codes-130e62df.cjs.dev.js');
6
6
 
7
7
 
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var codes = require('../../dist/codes-e0df67c4.cjs.prod.js');
5
+ var codes = require('../../dist/codes-aff770a3.cjs.prod.js');
6
6
 
7
7
 
8
8
 
@@ -1 +1 @@
1
- export { T as TRPC_ERROR_CODES_BY_KEY, a as TRPC_ERROR_CODES_BY_NUMBER } from '../../dist/codes-fe07bf82.esm.js';
1
+ export { T as TRPC_ERROR_CODES_BY_KEY, a as TRPC_ERROR_CODES_BY_NUMBER } from '../../dist/codes-5678cc97.esm.js';
package/src/TRPCError.ts CHANGED
@@ -2,13 +2,13 @@ import { getMessageFromUnkownError } from './internals/errors';
2
2
  import { TRPC_ERROR_CODE_KEY } from './rpc/codes';
3
3
 
4
4
  export class TRPCError extends Error {
5
- public readonly cause?: unknown;
5
+ public readonly cause?: Error | undefined;
6
6
  public readonly code;
7
7
 
8
8
  constructor(opts: {
9
9
  message?: string;
10
10
  code: TRPC_ERROR_CODE_KEY;
11
- cause?: unknown;
11
+ cause?: Error;
12
12
  }) {
13
13
  const cause = opts.cause;
14
14
  const code = opts.code;
@@ -1,5 +1,4 @@
1
1
  import { FastifyReply, FastifyRequest } from 'fastify';
2
- import { URLSearchParams } from 'url';
3
2
  import { assertNotBrowser } from '../../assertNotBrowser';
4
3
  import {
5
4
  HTTPBaseHandlerOptions,
@@ -1,4 +1,4 @@
1
- /// <reference types="fastify-websocket" />
1
+ /// <reference types="@fastify/websocket" />
2
2
  import { FastifyInstance, FastifyReply, FastifyRequest } from 'fastify';
3
3
  import { FastifyHandlerOptions } from '.';
4
4
  import { AnyRouter } from '../..';
@@ -0,0 +1,61 @@
1
+ import { assertNotBrowser } from '../../assertNotBrowser';
2
+ import { HTTPRequest } from '../../http/internals/types';
3
+ import { resolveHTTPResponse } from '../../http/resolveHTTPResponse';
4
+ import { AnyRouter } from '../../router';
5
+ import { FetchHandlerOptions } from './types';
6
+
7
+ assertNotBrowser();
8
+
9
+ export type FetchHandlerRequestOptions<TRouter extends AnyRouter> = {
10
+ req: Request;
11
+ endpoint: string;
12
+ } & FetchHandlerOptions<TRouter>;
13
+
14
+ export async function fetchRequestHandler<TRouter extends AnyRouter>(
15
+ opts: FetchHandlerRequestOptions<TRouter>,
16
+ ): Promise<Response> {
17
+ const createContext = async () => {
18
+ return opts.createContext?.({ req: opts.req });
19
+ };
20
+
21
+ const url = new URL(opts.req.url);
22
+ const path = url.pathname.slice(opts.endpoint.length + 1);
23
+ const req: HTTPRequest = {
24
+ query: url.searchParams,
25
+ method: opts.req.method,
26
+ headers: Object.fromEntries(opts.req.headers),
27
+ body: await opts.req.text(),
28
+ };
29
+
30
+ const result = await resolveHTTPResponse({
31
+ req,
32
+ createContext,
33
+ path,
34
+ router: opts.router,
35
+ batching: opts.batching,
36
+ responseMeta: opts.responseMeta,
37
+ onError(o) {
38
+ opts?.onError?.({ ...o, req: opts.req });
39
+ },
40
+ });
41
+
42
+ const res = new Response(result.body, {
43
+ status: result.status,
44
+ });
45
+
46
+ for (const [key, value] of Object.entries(result.headers ?? {})) {
47
+ if (typeof value === 'undefined') {
48
+ continue;
49
+ }
50
+
51
+ if (typeof value === 'string') {
52
+ res.headers.set(key, value);
53
+ continue;
54
+ }
55
+
56
+ for (const v of value) {
57
+ res.headers.append(key, v);
58
+ }
59
+ }
60
+ return res;
61
+ }
@@ -0,0 +1,2 @@
1
+ export * from './fetchRequestHandler';
2
+ export * from './types';
@@ -0,0 +1,28 @@
1
+ import { HTTPBaseHandlerOptions } from '../../http/internals/types';
2
+ import { AnyRouter, inferRouterContext } from '../../router';
3
+
4
+ export type FetchCreateContextFnOptions = {
5
+ req: Request;
6
+ };
7
+
8
+ export type FetchCreateContextFn<TRouter extends AnyRouter> = (opts: {
9
+ req: Request;
10
+ }) => inferRouterContext<TRouter> | Promise<inferRouterContext<TRouter>>;
11
+
12
+ export type FetchCreateContextOption<TRouter extends AnyRouter> =
13
+ unknown extends inferRouterContext<TRouter>
14
+ ? {
15
+ /**
16
+ * @link https://trpc.io/docs/context
17
+ **/
18
+ createContext?: FetchCreateContextFn<TRouter>;
19
+ }
20
+ : {
21
+ /**
22
+ * @link https://trpc.io/docs/context
23
+ **/
24
+ createContext: FetchCreateContextFn<TRouter>;
25
+ };
26
+
27
+ export type FetchHandlerOptions<TRouter extends AnyRouter> =
28
+ HTTPBaseHandlerOptions<TRouter, Request> & FetchCreateContextOption<TRouter>;
@@ -7,7 +7,6 @@ import type {
7
7
  } from 'next/types';
8
8
  import { TRPCError } from '../TRPCError';
9
9
  import { AnyRouter } from '../router';
10
- import { TRPCErrorResponse } from '../rpc';
11
10
  import { nodeHTTPRequestHandler } from './node-http';
12
11
  import {
13
12
  NodeHTTPCreateContextFnOptions,
@@ -46,12 +45,11 @@ export function createNextApiHandler<TRouter extends AnyRouter>(
46
45
  path: undefined,
47
46
  input: undefined,
48
47
  });
49
- const json: TRPCErrorResponse = {
48
+ res.statusCode = 500;
49
+ res.json({
50
50
  id: -1,
51
51
  error,
52
- };
53
- res.statusCode = 500;
54
- res.json(json);
52
+ });
55
53
  return;
56
54
  }
57
55
 
@@ -1,5 +1,4 @@
1
1
  /* eslint-disable @typescript-eslint/no-non-null-assertion */
2
- import { URLSearchParams } from 'url';
3
2
  import { assertNotBrowser } from '../../assertNotBrowser';
4
3
  import { HTTPRequest } from '../../http/internals/types';
5
4
  import { resolveHTTPResponse } from '../../http/resolveHTTPResponse';
@@ -1,15 +1,17 @@
1
- import http from 'http';
2
- import qs from 'qs';
3
- import { inferRouterContext } from '../..';
1
+ import { IncomingMessage, ServerResponse } from 'http';
4
2
  import { HTTPBaseHandlerOptions } from '../../http/internals/types';
5
- import { AnyRouter } from '../../router';
3
+ import { AnyRouter, inferRouterContext } from '../../router';
6
4
 
7
- export type NodeHTTPRequest = http.IncomingMessage & {
5
+ interface ParsedQs {
6
+ [key: string]: undefined | string | string[] | ParsedQs | ParsedQs[];
7
+ }
8
+
9
+ export type NodeHTTPRequest = IncomingMessage & {
8
10
  method?: string;
9
- query?: qs.ParsedQs;
11
+ query?: ParsedQs;
10
12
  body?: unknown;
11
13
  };
12
- export type NodeHTTPResponse = http.ServerResponse;
14
+ export type NodeHTTPResponse = ServerResponse;
13
15
 
14
16
  export type NodeHTTPCreateContextOption<
15
17
  TRouter extends AnyRouter,
@@ -2,7 +2,6 @@
2
2
 
3
3
  /* eslint-disable @typescript-eslint/no-explicit-any */
4
4
  import http from 'http';
5
- import url from 'url';
6
5
  import { AnyRouter } from '../router';
7
6
  import {
8
7
  NodeHTTPCreateContextFnOptions,
@@ -22,12 +21,20 @@ export function createHTTPHandler<TRouter extends AnyRouter>(
22
21
  opts: CreateHTTPHandlerOptions<TRouter>,
23
22
  ) {
24
23
  return async (req: http.IncomingMessage, res: http.ServerResponse) => {
25
- const endpoint = url.parse(req.url!).pathname!.slice(1);
24
+ // if no hostname, set a dummy one
25
+ const href = req.url!.startsWith('/')
26
+ ? `http://127.0.0.1${req.url}`
27
+ : req.url!;
28
+
29
+ // get procedure path and remove the leading slash
30
+ // /procedure -> procedure
31
+ const path = new URL(href).pathname.slice(1);
32
+
26
33
  await nodeHTTPRequestHandler({
27
34
  ...opts,
28
35
  req,
29
36
  res,
30
- path: endpoint,
37
+ path,
31
38
  });
32
39
  };
33
40
  }