@trpc/server 10.0.0-alpha.21 → 10.0.0-alpha.22

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 (148) hide show
  1. package/adapters/express/dist/trpc-server-adapters-express.cjs.dev.js +3 -3
  2. package/adapters/express/dist/trpc-server-adapters-express.cjs.prod.js +3 -3
  3. package/adapters/express/dist/trpc-server-adapters-express.esm.js +3 -3
  4. package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.dev.js +2 -2
  5. package/adapters/fastify/dist/trpc-server-adapters-fastify.cjs.prod.js +2 -2
  6. package/adapters/fastify/dist/trpc-server-adapters-fastify.esm.js +2 -2
  7. package/adapters/fastify/index.js +1 -1
  8. package/adapters/fetch/index.d.ts +1 -0
  9. package/adapters/fetch/index.js +1 -0
  10. package/adapters/next/dist/trpc-server-adapters-next.cjs.dev.js +3 -3
  11. package/adapters/next/dist/trpc-server-adapters-next.cjs.prod.js +3 -3
  12. package/adapters/next/dist/trpc-server-adapters-next.esm.js +3 -3
  13. package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.dev.js +3 -3
  14. package/adapters/node-http/dist/trpc-server-adapters-node-http.cjs.prod.js +3 -3
  15. package/adapters/node-http/dist/trpc-server-adapters-node-http.esm.js +3 -3
  16. package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.dev.js +3 -3
  17. package/adapters/standalone/dist/trpc-server-adapters-standalone.cjs.prod.js +3 -3
  18. package/adapters/standalone/dist/trpc-server-adapters-standalone.esm.js +3 -3
  19. package/dist/{transformTRPCResponse-9fdeecca.mjs → TRPCError-7971540a.mjs} +1 -53
  20. package/dist/{transformTRPCResponse-a57d3226.js → TRPCError-ddec3395.js} +0 -54
  21. package/dist/adapters/express.js +5 -4
  22. package/dist/adapters/express.mjs +5 -4
  23. package/dist/adapters/fastify/index.js +5 -5
  24. package/dist/adapters/fastify/index.mjs +5 -5
  25. package/dist/adapters/fetch/fetchRequestHandler.d.ts +8 -0
  26. package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -0
  27. package/dist/adapters/fetch/index.d.ts +3 -0
  28. package/dist/adapters/fetch/index.d.ts.map +1 -0
  29. package/dist/adapters/fetch/index.js +69 -0
  30. package/dist/adapters/fetch/index.mjs +65 -0
  31. package/dist/adapters/fetch/index.ts.js +1 -0
  32. package/dist/adapters/fetch/types.d.ts +21 -0
  33. package/dist/adapters/fetch/types.d.ts.map +1 -0
  34. package/dist/adapters/next.d.ts.map +1 -1
  35. package/dist/adapters/next.js +9 -9
  36. package/dist/adapters/next.mjs +8 -8
  37. package/dist/adapters/node-http/index.js +5 -4
  38. package/dist/adapters/node-http/index.mjs +5 -4
  39. package/dist/adapters/node-http/types.d.ts +1 -2
  40. package/dist/adapters/node-http/types.d.ts.map +1 -1
  41. package/dist/adapters/standalone.js +5 -4
  42. package/dist/adapters/standalone.mjs +5 -4
  43. package/dist/adapters/ws.d.ts.map +1 -1
  44. package/dist/adapters/ws.js +117 -80
  45. package/dist/adapters/ws.mjs +111 -74
  46. package/dist/{codes-6c13cf43.mjs → envelopes-1deb2fa7.mjs} +17 -1
  47. package/dist/{codes-4e4d55a9.js → envelopes-a953b930.js} +16 -0
  48. package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
  49. package/dist/index.d.ts +0 -1
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +37 -51
  52. package/dist/index.mjs +30 -42
  53. package/dist/internals/callProcedure.d.ts +2 -2
  54. package/dist/internals/callProcedure.d.ts.map +1 -1
  55. package/dist/internals/procedure.d.ts +4 -3
  56. package/dist/internals/procedure.d.ts.map +1 -1
  57. package/dist/internals/transformTRPCResponse.d.ts +4 -2
  58. package/dist/internals/transformTRPCResponse.d.ts.map +1 -1
  59. package/dist/{nodeHTTPRequestHandler-13c4bded.mjs → nodeHTTPRequestHandler-1cdb6383.mjs} +2 -2
  60. package/dist/{nodeHTTPRequestHandler-745e43e5.js → nodeHTTPRequestHandler-848f07b5.js} +3 -3
  61. package/dist/observable/index.d.ts +5 -0
  62. package/dist/observable/index.d.ts.map +1 -0
  63. package/dist/observable/index.js +204 -0
  64. package/dist/observable/index.mjs +195 -0
  65. package/dist/observable/index.ts.js +1 -0
  66. package/dist/observable/internals/identity.d.ts +2 -0
  67. package/dist/observable/internals/identity.d.ts.map +1 -0
  68. package/dist/observable/internals/observableToPromise.d.ts +10 -0
  69. package/dist/observable/internals/observableToPromise.d.ts.map +1 -0
  70. package/dist/observable/internals/pipe.d.ts +4 -0
  71. package/dist/observable/internals/pipe.d.ts.map +1 -0
  72. package/dist/observable/observable.d.ts +5 -0
  73. package/dist/observable/observable.d.ts.map +1 -0
  74. package/dist/observable/operators/index.d.ts +4 -0
  75. package/dist/observable/operators/index.d.ts.map +1 -0
  76. package/dist/observable/operators/map.d.ts +3 -0
  77. package/dist/observable/operators/map.d.ts.map +1 -0
  78. package/dist/observable/operators/share.d.ts +6 -0
  79. package/dist/observable/operators/share.d.ts.map +1 -0
  80. package/dist/observable/operators/tap.d.ts +3 -0
  81. package/dist/observable/operators/tap.d.ts.map +1 -0
  82. package/dist/observable/types.d.ts +29 -0
  83. package/dist/observable/types.d.ts.map +1 -0
  84. package/dist/observable-137ea1bd.mjs +105 -0
  85. package/dist/observable-3aa4d911.js +108 -0
  86. package/dist/{resolveHTTPResponse-de40fda7.mjs → resolveHTTPResponse-54a79e6c.mjs} +14 -20
  87. package/dist/{resolveHTTPResponse-b1167b6a.js → resolveHTTPResponse-ec3dccaa.js} +21 -27
  88. package/dist/router.d.ts +6 -6
  89. package/dist/router.d.ts.map +1 -1
  90. package/dist/rpc/envelopes.d.ts +61 -39
  91. package/dist/rpc/envelopes.d.ts.map +1 -1
  92. package/dist/rpc/index.js +7 -3
  93. package/dist/rpc/index.mjs +1 -1
  94. package/dist/subscription.d.ts +3 -52
  95. package/dist/subscription.d.ts.map +1 -1
  96. package/dist/subscription.js +44 -0
  97. package/dist/subscription.mjs +40 -0
  98. package/dist/subscription.ts.js +1 -0
  99. package/dist/transformTRPCResponse-333bed6c.js +56 -0
  100. package/dist/transformTRPCResponse-e0cba527.mjs +53 -0
  101. package/dist/types.d.ts +8 -0
  102. package/dist/types.d.ts.map +1 -1
  103. package/observable/index.d.ts +1 -0
  104. package/observable/index.js +1 -0
  105. package/package.json +24 -7
  106. package/rpc/dist/trpc-server-rpc.cjs.dev.js +1 -1
  107. package/rpc/dist/trpc-server-rpc.cjs.prod.js +1 -1
  108. package/rpc/dist/trpc-server-rpc.esm.js +1 -1
  109. package/src/adapters/fetch/fetchRequestHandler.ts +61 -0
  110. package/src/adapters/fetch/index.ts +2 -0
  111. package/src/adapters/fetch/types.ts +28 -0
  112. package/src/adapters/next.ts +3 -5
  113. package/src/adapters/node-http/types.ts +1 -2
  114. package/src/adapters/ws.ts +109 -71
  115. package/src/http/resolveHTTPResponse.ts +16 -20
  116. package/src/index.ts +0 -1
  117. package/src/internals/callProcedure.ts +6 -3
  118. package/src/internals/procedure.ts +40 -27
  119. package/src/internals/transformTRPCResponse.ts +20 -15
  120. package/src/observable/index.ts +4 -0
  121. package/src/observable/internals/identity.ts +3 -0
  122. package/src/observable/internals/observableToPromise.ts +49 -0
  123. package/src/observable/internals/pipe.ts +22 -0
  124. package/src/observable/observable.test.ts +101 -0
  125. package/src/observable/observable.ts +75 -0
  126. package/src/observable/operators/index.ts +3 -0
  127. package/src/observable/operators/map.test.ts +92 -0
  128. package/src/observable/operators/map.ts +25 -0
  129. package/src/observable/operators/share.test.ts +60 -0
  130. package/src/observable/operators/share.ts +67 -0
  131. package/src/observable/operators/tap.ts +26 -0
  132. package/src/observable/types.ts +69 -0
  133. package/src/router.ts +7 -9
  134. package/src/rpc/envelopes.ts +87 -68
  135. package/src/subscription.ts +5 -123
  136. package/src/types.ts +7 -0
  137. package/dist/internals/wrapCallSafe.d.ts +0 -16
  138. package/dist/internals/wrapCallSafe.d.ts.map +0 -1
  139. package/dist/subscription-4b936ba3.js +0 -136
  140. package/dist/subscription-8a85f253.mjs +0 -133
  141. package/src/internals/wrapCallSafe.ts +0 -19
  142. package/ws/dist/trpc-server-ws.cjs.d.ts +0 -1
  143. package/ws/dist/trpc-server-ws.cjs.dev.js +0 -15
  144. package/ws/dist/trpc-server-ws.cjs.js +0 -7
  145. package/ws/dist/trpc-server-ws.cjs.prod.js +0 -15
  146. package/ws/dist/trpc-server-ws.esm.js +0 -11
  147. package/ws/index.d.ts +0 -1
  148. package/ws/index.js +0 -1
@@ -1 +1 @@
1
- export { T as TRPC_ERROR_CODES_BY_KEY, a as TRPC_ERROR_CODES_BY_NUMBER } from '../codes-6c13cf43.mjs';
1
+ export { J as JSONRPC2, T as TRPC_ERROR_CODES_BY_KEY, a as TRPC_ERROR_CODES_BY_NUMBER } from '../envelopes-1deb2fa7.mjs';
@@ -1,58 +1,9 @@
1
- /// <reference types="node" />
2
- import { EventEmitter } from 'events';
3
- interface SubscriptionEvents<TOutput> {
4
- data: (data: TOutput) => void;
5
- destroy: () => void;
6
- error: (error: Error) => void;
7
- }
8
- declare interface SubscriptionEventEmitter<TOutput> {
9
- on<U extends keyof SubscriptionEvents<TOutput>>(event: U, listener: SubscriptionEvents<TOutput>[U]): this;
10
- once<U extends keyof SubscriptionEvents<TOutput>>(event: U, listener: SubscriptionEvents<TOutput>[U]): this;
11
- emit<U extends keyof SubscriptionEvents<TOutput>>(event: U, ...args: Parameters<SubscriptionEvents<TOutput>[U]>): boolean;
12
- }
13
- declare class SubscriptionEventEmitter<TOutput> extends EventEmitter {
14
- }
15
- declare type UnsubscribeFn = () => void;
16
- declare type EmitFn<TOutput> = (data: TOutput) => void;
17
- export declare type SubscriptionEmit<TOutput> = {
18
- data: EmitFn<TOutput>;
19
- error: EmitFn<Error>;
20
- };
21
- export declare type SubscriptionCallback<TOutput> = (emit: SubscriptionEmit<TOutput>) => UnsubscribeFn | Promise<UnsubscribeFn>;
22
- /**
23
- * @beta
24
- */
25
- export declare class Subscription<TOutput = unknown> {
26
- private readonly events;
27
- private callback;
28
- private isDestroyed;
29
- constructor(callback: SubscriptionCallback<TOutput>);
30
- destroy(): void;
31
- start(): Promise<void>;
32
- /**
33
- * @deprecated This method is just here to help with `inferSubscriptionOutput` which I can't get working without it
34
- */
35
- output(): TOutput;
36
- /**
37
- * Emit data
38
- */
39
- emitOutput(data: TOutput): void;
40
- /**
41
- * Emit error
42
- */
43
- emitError(err: Error): void;
44
- on(...args: Parameters<SubscriptionEventEmitter<TOutput>['on']>): SubscriptionEventEmitter<TOutput>;
45
- off(...args: Parameters<SubscriptionEventEmitter<TOutput>['off']>): SubscriptionEventEmitter<TOutput>;
46
- }
47
- /**
48
- * @alpha Might be removed
49
- */
1
+ import { Observable, Observer } from './observable';
50
2
  export declare function subscriptionPullFactory<TOutput>(opts: {
51
3
  /**
52
4
  * The interval of how often the function should run
53
5
  */
54
6
  intervalMs: number;
55
- pull(emit: SubscriptionEmit<TOutput>): void | Promise<void>;
56
- }): Subscription<TOutput>;
57
- export {};
7
+ pull(emit: Observer<TOutput, unknown>): void | Promise<void>;
8
+ }): Observable<TOutput, unknown>;
58
9
  //# sourceMappingURL=subscription.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../src/subscription.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,UAAU,kBAAkB,CAAC,OAAO;IAClC,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC/B;AACD,OAAO,WAAW,wBAAwB,CAAC,OAAO;IAChD,EAAE,CAAC,CAAC,SAAS,MAAM,kBAAkB,CAAC,OAAO,CAAC,EAC5C,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GACvC,IAAI,CAAC;IAER,IAAI,CAAC,CAAC,SAAS,MAAM,kBAAkB,CAAC,OAAO,CAAC,EAC9C,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GACvC,IAAI,CAAC;IAER,IAAI,CAAC,CAAC,SAAS,MAAM,kBAAkB,CAAC,OAAO,CAAC,EAC9C,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAClD,OAAO,CAAC;CACZ;AAED,cAAM,wBAAwB,CAAC,OAAO,CAAE,SAAQ,YAAY;CAAG;AAE/D,aAAK,aAAa,GAAG,MAAM,IAAI,CAAC;AAChC,aAAK,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;AAE/C,oBAAY,gBAAgB,CAAC,OAAO,IAAI;IACtC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;CACtB,CAAC;AACF,oBAAY,oBAAoB,CAAC,OAAO,IAAI,CAC1C,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,KAC5B,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5C;;GAEG;AACH,qBAAa,YAAY,CAAC,OAAO,GAAG,OAAO;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAC3D,OAAO,CAAC,QAAQ,CAAC;IACjB,OAAO,CAAC,WAAW,CAAU;gBAEjB,QAAQ,EAAE,oBAAoB,CAAC,OAAO,CAAC;IAM5C,OAAO;IAUD,KAAK;IA4BlB;;OAEG;IACI,MAAM,IAAI,OAAO;IAIxB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,OAAO;IAGxB;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,KAAK;IAIpB,EAAE,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IAG/D,GAAG,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;CAGlE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,IAAI,EAAE;IACrD;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D,GAAG,YAAY,CAAC,OAAO,CAAC,CA4BxB"}
1
+ {"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../src/subscription.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAc,MAAM,cAAc,CAAC;AAEhE,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,IAAI,EAAE;IACrD;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D,GAAG,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CA4B/B"}
@@ -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.21",
3
+ "version": "10.0.0-alpha.22",
4
4
  "description": "tRPC Server",
5
5
  "author": "KATT",
6
6
  "license": "MIT",
@@ -62,41 +62,58 @@
62
62
  "require": "./dist/adapters/ws.js",
63
63
  "default": "./dist/adapters/ws.js"
64
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
+ },
65
70
  "./rpc": {
66
71
  "import": "./dist/rpc/index.mjs",
67
72
  "require": "./dist/rpc/index.js",
68
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"
69
84
  }
70
85
  },
71
86
  "files": [
72
87
  "README.md",
73
88
  "dist",
74
89
  "adapters",
75
- "ws",
76
90
  "rpc",
91
+ "observable",
77
92
  "src"
78
93
  ],
79
94
  "publishConfig": {
80
95
  "access": "public"
81
96
  },
82
97
  "devDependencies": {
83
- "@testing-library/jest-dom": "^5.14.1",
84
- "@testing-library/react": "^12.0.0",
85
- "@testing-library/user-event": "^13.2.1",
98
+ "@cloudflare/workers-types": "^3.8.0",
99
+ "@miniflare/core": "^2.4.0",
86
100
  "@types/express": "^4.17.12",
87
101
  "@types/hash-sum": "^1.0.0",
88
102
  "@types/ws": "^8.2.0",
89
103
  "abort-controller": "^3.0.0",
90
104
  "devalue": "^2.0.1",
105
+ "esbuild": "^0.14.38",
91
106
  "express": "^4.17.1",
92
107
  "fastify": "^3.27.1",
93
108
  "fastify-plugin": "^3.0.1",
94
109
  "fastify-websocket": "^4.0.0",
95
110
  "hash-sum": "^2.0.0",
96
111
  "jest": "^27.1.0",
112
+ "jest-environment-miniflare": "^2.4.0",
97
113
  "konn": "^0.7.0",
114
+ "miniflare": "^2.4.0",
98
115
  "myzod": "^1.3.1",
99
- "next": "^12.0.1",
116
+ "next": "^12.1.6",
100
117
  "node-fetch": "^2.6.1",
101
118
  "superstruct": "^0.15.2",
102
119
  "typescript": "4.4.4",
@@ -107,5 +124,5 @@
107
124
  "dependencies": {
108
125
  "tslib": "^2.1.0"
109
126
  },
110
- "gitHead": "0db16da18ee5fc1ea4b2149490c316a4a700d2ab"
127
+ "gitHead": "d720eb2215f0fad6e70f4172a1bf084225d4d6de"
111
128
  }
@@ -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';
@@ -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,8 +1,7 @@
1
1
  import { IncomingMessage, ServerResponse } from 'http';
2
2
  import qs from 'qs';
3
- import { inferRouterContext } from '../..';
4
3
  import { HTTPBaseHandlerOptions } from '../../http/internals/types';
5
- import { AnyRouter } from '../../router';
4
+ import { AnyRouter, inferRouterContext } from '../../router';
6
5
 
7
6
  export type NodeHTTPRequest = IncomingMessage & {
8
7
  method?: string;