@trpc/server 11.0.0-alpha-tmp-export-from-main.221 → 11.0.0-alpha-tmp-export-from-main.222

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 (136) hide show
  1. package/dist/adapters/aws-lambda/index.d.mts +68 -0
  2. package/dist/adapters/aws-lambda/index.d.ts +54 -6
  3. package/dist/adapters/aws-lambda/index.js +110 -20
  4. package/dist/adapters/aws-lambda/index.mjs +94 -4
  5. package/dist/adapters/express.d.mts +19 -0
  6. package/dist/adapters/express.d.ts +9 -6
  7. package/dist/adapters/express.js +3 -3
  8. package/dist/adapters/express.mjs +1 -1
  9. package/dist/adapters/fastify/index.d.mts +33 -0
  10. package/dist/adapters/fastify/index.d.ts +33 -3
  11. package/dist/adapters/fastify/index.js +124 -5
  12. package/dist/adapters/fastify/index.mjs +125 -2
  13. package/dist/adapters/fetch/index.d.mts +51 -0
  14. package/dist/adapters/fetch/index.d.ts +51 -3
  15. package/dist/adapters/fetch/index.js +115 -4
  16. package/dist/adapters/fetch/index.mjs +116 -1
  17. package/dist/adapters/next.d.mts +21 -0
  18. package/dist/adapters/next.d.ts +11 -7
  19. package/dist/adapters/next.js +6 -6
  20. package/dist/adapters/next.mjs +2 -2
  21. package/dist/adapters/node-http/content-type/form-data/index.d.mts +219 -0
  22. package/dist/adapters/node-http/content-type/form-data/index.d.ts +201 -10
  23. package/dist/adapters/node-http/content-type/form-data/index.js +662 -23
  24. package/dist/adapters/node-http/content-type/form-data/index.mjs +646 -10
  25. package/dist/adapters/node-http/{types.d.ts → content-type/json/index.d.mts} +21 -15
  26. package/dist/adapters/node-http/content-type/json/index.d.ts +89 -2
  27. package/dist/adapters/node-http/content-type/json/index.js +48 -7
  28. package/dist/adapters/node-http/content-type/json/index.mjs +44 -3
  29. package/dist/adapters/node-http/index.d.mts +100 -0
  30. package/dist/adapters/node-http/index.d.ts +100 -3
  31. package/dist/adapters/node-http/index.js +106 -4
  32. package/dist/adapters/node-http/index.mjs +107 -1
  33. package/dist/adapters/standalone.d.mts +21 -0
  34. package/dist/adapters/standalone.d.ts +11 -9
  35. package/dist/adapters/standalone.js +9 -5
  36. package/dist/adapters/standalone.mjs +2 -2
  37. package/dist/adapters/ws.d.mts +36 -0
  38. package/dist/adapters/ws.d.ts +12 -13
  39. package/dist/adapters/ws.js +30 -28
  40. package/dist/adapters/ws.mjs +12 -10
  41. package/dist/http.d.mts +1 -0
  42. package/dist/http.d.ts +1 -7
  43. package/dist/http.js +7 -7
  44. package/dist/http.mjs +1 -1
  45. package/dist/index.d.mts +9 -0
  46. package/dist/index.d.ts +5 -65
  47. package/dist/index.js +809 -46
  48. package/dist/index.mjs +798 -1
  49. package/dist/observable.d.mts +1 -0
  50. package/dist/observable.d.ts +1 -3
  51. package/dist/observable.js +8 -8
  52. package/dist/observable.mjs +1 -1
  53. package/dist/rpc.d.mts +1 -0
  54. package/dist/rpc.d.ts +1 -3
  55. package/dist/rpc.js +5 -5
  56. package/dist/rpc.mjs +1 -1
  57. package/dist/shared.d.mts +1 -0
  58. package/dist/shared.d.ts +1 -26
  59. package/dist/shared.js +4 -4
  60. package/dist/shared.mjs +1 -1
  61. package/dist/unstableDontImportMe.d.mts +1 -0
  62. package/dist/unstableDontImportMe.d.ts +1 -10
  63. package/dist/unstableDontImportMe.js +1549 -142
  64. package/dist/unstableDontImportMe.mjs +1514 -1
  65. package/package.json +6 -4
  66. package/dist/@trpc-server/http.d.ts +0 -2
  67. package/dist/@trpc-server/http.d.ts.map +0 -1
  68. package/dist/adapters/aws-lambda/index.d.ts.map +0 -1
  69. package/dist/adapters/aws-lambda/utils.d.ts +0 -48
  70. package/dist/adapters/aws-lambda/utils.d.ts.map +0 -1
  71. package/dist/adapters/aws-lambda/utils.js +0 -100
  72. package/dist/adapters/aws-lambda/utils.mjs +0 -93
  73. package/dist/adapters/express.d.ts.map +0 -1
  74. package/dist/adapters/fastify/fastifyRequestHandler.d.ts +0 -13
  75. package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +0 -1
  76. package/dist/adapters/fastify/fastifyRequestHandler.js +0 -81
  77. package/dist/adapters/fastify/fastifyRequestHandler.mjs +0 -79
  78. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts +0 -22
  79. package/dist/adapters/fastify/fastifyTRPCPlugin.d.ts.map +0 -1
  80. package/dist/adapters/fastify/fastifyTRPCPlugin.js +0 -51
  81. package/dist/adapters/fastify/fastifyTRPCPlugin.mjs +0 -49
  82. package/dist/adapters/fastify/index.d.ts.map +0 -1
  83. package/dist/adapters/fetch/fetchRequestHandler.d.ts +0 -18
  84. package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +0 -1
  85. package/dist/adapters/fetch/fetchRequestHandler.js +0 -118
  86. package/dist/adapters/fetch/fetchRequestHandler.mjs +0 -116
  87. package/dist/adapters/fetch/index.d.ts.map +0 -1
  88. package/dist/adapters/fetch/types.d.ts +0 -31
  89. package/dist/adapters/fetch/types.d.ts.map +0 -1
  90. package/dist/adapters/next.d.ts.map +0 -1
  91. package/dist/adapters/node-http/content-type/form-data/fileUploadHandler.d.ts +0 -70
  92. package/dist/adapters/node-http/content-type/form-data/fileUploadHandler.d.ts.map +0 -1
  93. package/dist/adapters/node-http/content-type/form-data/fileUploadHandler.js +0 -161
  94. package/dist/adapters/node-http/content-type/form-data/fileUploadHandler.mjs +0 -157
  95. package/dist/adapters/node-http/content-type/form-data/index.d.ts.map +0 -1
  96. package/dist/adapters/node-http/content-type/form-data/memoryUploadHandler.d.ts +0 -31
  97. package/dist/adapters/node-http/content-type/form-data/memoryUploadHandler.d.ts.map +0 -1
  98. package/dist/adapters/node-http/content-type/form-data/memoryUploadHandler.js +0 -29
  99. package/dist/adapters/node-http/content-type/form-data/memoryUploadHandler.mjs +0 -27
  100. package/dist/adapters/node-http/content-type/form-data/streamSlice.d.ts +0 -16
  101. package/dist/adapters/node-http/content-type/form-data/streamSlice.d.ts.map +0 -1
  102. package/dist/adapters/node-http/content-type/form-data/streamSlice.js +0 -46
  103. package/dist/adapters/node-http/content-type/form-data/streamSlice.mjs +0 -44
  104. package/dist/adapters/node-http/content-type/form-data/uploadHandler.d.ts +0 -45
  105. package/dist/adapters/node-http/content-type/form-data/uploadHandler.d.ts.map +0 -1
  106. package/dist/adapters/node-http/content-type/form-data/uploadHandler.js +0 -30
  107. package/dist/adapters/node-http/content-type/form-data/uploadHandler.mjs +0 -26
  108. package/dist/adapters/node-http/content-type/json/getPostBody.d.ts +0 -7
  109. package/dist/adapters/node-http/content-type/json/getPostBody.d.ts.map +0 -1
  110. package/dist/adapters/node-http/content-type/json/getPostBody.js +0 -42
  111. package/dist/adapters/node-http/content-type/json/getPostBody.mjs +0 -40
  112. package/dist/adapters/node-http/content-type/json/index.d.ts.map +0 -1
  113. package/dist/adapters/node-http/index.d.ts.map +0 -1
  114. package/dist/adapters/node-http/internals/contentType.d.ts +0 -9
  115. package/dist/adapters/node-http/internals/contentType.d.ts.map +0 -1
  116. package/dist/adapters/node-http/internals/contentType.js +0 -8
  117. package/dist/adapters/node-http/internals/contentType.mjs +0 -6
  118. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts +0 -14
  119. package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +0 -1
  120. package/dist/adapters/node-http/nodeHTTPRequestHandler.js +0 -109
  121. package/dist/adapters/node-http/nodeHTTPRequestHandler.mjs +0 -107
  122. package/dist/adapters/node-http/types.d.ts.map +0 -1
  123. package/dist/adapters/standalone.d.ts.map +0 -1
  124. package/dist/adapters/ws.d.ts.map +0 -1
  125. package/dist/http.d.ts.map +0 -1
  126. package/dist/index.d.ts.map +0 -1
  127. package/dist/node_modules/.pnpm/@web3-storage_multipart-parser@1.0.0/node_modules/@web3-storage/multipart-parser/esm/src/index.js +0 -203
  128. package/dist/node_modules/.pnpm/@web3-storage_multipart-parser@1.0.0/node_modules/@web3-storage/multipart-parser/esm/src/index.mjs +0 -201
  129. package/dist/node_modules/.pnpm/@web3-storage_multipart-parser@1.0.0/node_modules/@web3-storage/multipart-parser/esm/src/search.js +0 -167
  130. package/dist/node_modules/.pnpm/@web3-storage_multipart-parser@1.0.0/node_modules/@web3-storage/multipart-parser/esm/src/search.mjs +0 -163
  131. package/dist/node_modules/.pnpm/@web3-storage_multipart-parser@1.0.0/node_modules/@web3-storage/multipart-parser/esm/src/utils.js +0 -35
  132. package/dist/node_modules/.pnpm/@web3-storage_multipart-parser@1.0.0/node_modules/@web3-storage/multipart-parser/esm/src/utils.mjs +0 -30
  133. package/dist/observable.d.ts.map +0 -1
  134. package/dist/rpc.d.ts.map +0 -1
  135. package/dist/shared.d.ts.map +0 -1
  136. package/dist/unstableDontImportMe.d.ts.map +0 -1
package/dist/index.js CHANGED
@@ -1,46 +1,809 @@
1
- 'use strict';
2
-
3
- var core = require('@trpc/core');
4
-
5
-
6
-
7
- Object.defineProperty(exports, "TRPCError", {
8
- enumerable: true,
9
- get: function () { return core.TRPCError; }
10
- });
11
- Object.defineProperty(exports, "callProcedure", {
12
- enumerable: true,
13
- get: function () { return core.callProcedure; }
14
- });
15
- Object.defineProperty(exports, "callTRPCProcedure", {
16
- enumerable: true,
17
- get: function () { return core.callProcedure; }
18
- });
19
- Object.defineProperty(exports, "createTRPCFlatProxy", {
20
- enumerable: true,
21
- get: function () { return core.createFlatProxy; }
22
- });
23
- Object.defineProperty(exports, "experimental_standaloneMiddleware", {
24
- enumerable: true,
25
- get: function () { return core.experimental_standaloneMiddleware; }
26
- });
27
- Object.defineProperty(exports, "experimental_trpcMiddleware", {
28
- enumerable: true,
29
- get: function () { return core.experimental_standaloneMiddleware; }
30
- });
31
- Object.defineProperty(exports, "getErrorShape", {
32
- enumerable: true,
33
- get: function () { return core.getErrorShape; }
34
- });
35
- Object.defineProperty(exports, "getTRPCErrorFromUnknown", {
36
- enumerable: true,
37
- get: function () { return core.getTRPCErrorFromUnknown; }
38
- });
39
- Object.defineProperty(exports, "initTRPC", {
40
- enumerable: true,
41
- get: function () { return core.initTRPC; }
42
- });
43
- Object.defineProperty(exports, "transformTRPCResponse", {
44
- enumerable: true,
45
- get: function () { return core.transformTRPCResponse; }
46
- });
1
+ Object.defineProperty(exports, '__esModule', { value: true });
2
+
3
+ /**
4
+ * @internal
5
+ */ function invert(obj) {
6
+ const newObj = Object.create(null);
7
+ for(const key in obj){
8
+ const v = obj[key];
9
+ newObj[v] = key;
10
+ }
11
+ return newObj;
12
+ }
13
+ /**
14
+ * Ensures there are no duplicate keys when building a procedure.
15
+ * @internal
16
+ */ function mergeWithoutOverrides(obj1, ...objs) {
17
+ const newObj = Object.assign(Object.create(null), obj1);
18
+ for (const overrides of objs){
19
+ for(const key in overrides){
20
+ if (key in newObj && newObj[key] !== overrides[key]) {
21
+ throw new Error(`Duplicate key ${key}`);
22
+ }
23
+ newObj[key] = overrides[key];
24
+ }
25
+ }
26
+ return newObj;
27
+ }
28
+ /**
29
+ * Check that value is object
30
+ * @internal
31
+ */ function isObject(value) {
32
+ return !!value && !Array.isArray(value) && typeof value === 'object';
33
+ }
34
+ /**
35
+ * Create an object without inheriting anything from `Object.prototype`
36
+ * @internal
37
+ */ function omitPrototype(obj) {
38
+ return Object.assign(Object.create(null), obj);
39
+ }
40
+
41
+ // reference: https://www.jsonrpc.org/specification
42
+ /**
43
+ * JSON-RPC 2.0 Error codes
44
+ *
45
+ * `-32000` to `-32099` are reserved for implementation-defined server-errors.
46
+ * For tRPC we're copying the last digits of HTTP 4XX errors.
47
+ */ const TRPC_ERROR_CODES_BY_KEY = {
48
+ /**
49
+ * Invalid JSON was received by the server.
50
+ * An error occurred on the server while parsing the JSON text.
51
+ */ PARSE_ERROR: -32700,
52
+ /**
53
+ * The JSON sent is not a valid Request object.
54
+ */ BAD_REQUEST: -32600,
55
+ // Internal JSON-RPC error
56
+ INTERNAL_SERVER_ERROR: -32603,
57
+ NOT_IMPLEMENTED: -32603,
58
+ // Implementation specific errors
59
+ UNAUTHORIZED: -32001,
60
+ FORBIDDEN: -32003,
61
+ NOT_FOUND: -32004,
62
+ METHOD_NOT_SUPPORTED: -32005,
63
+ TIMEOUT: -32008,
64
+ CONFLICT: -32009,
65
+ PRECONDITION_FAILED: -32012,
66
+ PAYLOAD_TOO_LARGE: -32013,
67
+ UNPROCESSABLE_CONTENT: -32022,
68
+ TOO_MANY_REQUESTS: -32029,
69
+ CLIENT_CLOSED_REQUEST: -32099
70
+ };
71
+ invert(TRPC_ERROR_CODES_BY_KEY);
72
+
73
+ const JSONRPC2_TO_HTTP_CODE = {
74
+ PARSE_ERROR: 400,
75
+ BAD_REQUEST: 400,
76
+ UNAUTHORIZED: 401,
77
+ NOT_FOUND: 404,
78
+ FORBIDDEN: 403,
79
+ METHOD_NOT_SUPPORTED: 405,
80
+ TIMEOUT: 408,
81
+ CONFLICT: 409,
82
+ PRECONDITION_FAILED: 412,
83
+ PAYLOAD_TOO_LARGE: 413,
84
+ UNPROCESSABLE_CONTENT: 422,
85
+ TOO_MANY_REQUESTS: 429,
86
+ CLIENT_CLOSED_REQUEST: 499,
87
+ INTERNAL_SERVER_ERROR: 500,
88
+ NOT_IMPLEMENTED: 501
89
+ };
90
+ function getStatusCodeFromKey(code) {
91
+ return JSONRPC2_TO_HTTP_CODE[code] ?? 500;
92
+ }
93
+ function getHTTPStatusCodeFromError(error) {
94
+ return getStatusCodeFromKey(error.code);
95
+ }
96
+
97
+ /**
98
+ * @internal
99
+ */ function getErrorShape(opts) {
100
+ const { path, error, config } = opts;
101
+ const { code } = opts.error;
102
+ const shape = {
103
+ message: error.message,
104
+ code: TRPC_ERROR_CODES_BY_KEY[code],
105
+ data: {
106
+ code,
107
+ httpStatus: getHTTPStatusCodeFromError(error)
108
+ }
109
+ };
110
+ if (config.isDev && typeof opts.error.stack === 'string') {
111
+ shape.data.stack = opts.error.stack;
112
+ }
113
+ if (typeof path === 'string') {
114
+ shape.data.path = path;
115
+ }
116
+ return config.errorFormatter({
117
+ ...opts,
118
+ shape
119
+ });
120
+ }
121
+
122
+ class UnknownCauseError extends Error {
123
+ }
124
+ function getCauseFromUnknown(cause) {
125
+ if (cause instanceof Error) {
126
+ return cause;
127
+ }
128
+ const type = typeof cause;
129
+ if (type === 'undefined' || type === 'function' || cause === null) {
130
+ return undefined;
131
+ }
132
+ // Primitive types just get wrapped in an error
133
+ if (type !== 'object') {
134
+ return new Error(String(cause));
135
+ }
136
+ // If it's an object, we'll create a synthetic error
137
+ if (isObject(cause)) {
138
+ const err = new UnknownCauseError();
139
+ for(const key in cause){
140
+ err[key] = cause[key];
141
+ }
142
+ return err;
143
+ }
144
+ return undefined;
145
+ }
146
+ function getTRPCErrorFromUnknown(cause) {
147
+ if (cause instanceof TRPCError) {
148
+ return cause;
149
+ }
150
+ if (cause instanceof Error && cause.name === 'TRPCError') {
151
+ // https://github.com/trpc/trpc/pull/4848
152
+ return cause;
153
+ }
154
+ const trpcError = new TRPCError({
155
+ code: 'INTERNAL_SERVER_ERROR',
156
+ cause
157
+ });
158
+ // Inherit stack from error
159
+ if (cause instanceof Error && cause.stack) {
160
+ trpcError.stack = cause.stack;
161
+ }
162
+ return trpcError;
163
+ }
164
+ class TRPCError extends Error {
165
+ constructor(opts){
166
+ const cause = getCauseFromUnknown(opts.cause);
167
+ const message = opts.message ?? cause?.message ?? opts.code;
168
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
169
+ // @ts-ignore https://github.com/tc39/proposal-error-cause
170
+ super(message, {
171
+ cause
172
+ });
173
+ this.code = opts.code;
174
+ this.name = 'TRPCError';
175
+ if (!this.cause) {
176
+ // < ES2022 / < Node 16.9.0 compatability
177
+ this.cause = cause;
178
+ }
179
+ }
180
+ }
181
+
182
+ const noop = ()=>{
183
+ // noop
184
+ };
185
+ function createInnerProxy(callback, path) {
186
+ const proxy = new Proxy(noop, {
187
+ get (_obj, key) {
188
+ if (typeof key !== 'string' || key === 'then') {
189
+ // special case for if the proxy is accidentally treated
190
+ // like a PromiseLike (like in `Promise.resolve(proxy)`)
191
+ return undefined;
192
+ }
193
+ return createInnerProxy(callback, [
194
+ ...path,
195
+ key
196
+ ]);
197
+ },
198
+ apply (_1, _2, args) {
199
+ const isApply = path[path.length - 1] === 'apply';
200
+ return callback({
201
+ args: isApply ? args.length >= 2 ? args[1] : [] : args,
202
+ path: isApply ? path.slice(0, -1) : path
203
+ });
204
+ }
205
+ });
206
+ return proxy;
207
+ }
208
+ /**
209
+ * Creates a proxy that calls the callback with the path and arguments
210
+ *
211
+ * @internal
212
+ */ const createRecursiveProxy = (callback)=>createInnerProxy(callback, []);
213
+ /**
214
+ * Used in place of `new Proxy` where each handler will map 1 level deep to another value.
215
+ *
216
+ * @internal
217
+ */ const createFlatProxy = (callback)=>{
218
+ return new Proxy(noop, {
219
+ get (_obj, name) {
220
+ if (typeof name !== 'string' || name === 'then') {
221
+ // special case for if the proxy is accidentally treated
222
+ // like a PromiseLike (like in `Promise.resolve(proxy)`)
223
+ return undefined;
224
+ }
225
+ return callback(name);
226
+ }
227
+ });
228
+ };
229
+
230
+ const defaultFormatter = ({ shape })=>{
231
+ return shape;
232
+ };
233
+
234
+ /** @internal */ const middlewareMarker = 'middlewareMarker';
235
+ /**
236
+ * @internal
237
+ */ function createMiddlewareFactory() {
238
+ function createMiddlewareInner(middlewares) {
239
+ return {
240
+ _middlewares: middlewares,
241
+ unstable_pipe (middlewareBuilderOrFn) {
242
+ const pipedMiddleware = '_middlewares' in middlewareBuilderOrFn ? middlewareBuilderOrFn._middlewares : [
243
+ middlewareBuilderOrFn
244
+ ];
245
+ return createMiddlewareInner([
246
+ ...middlewares,
247
+ ...pipedMiddleware
248
+ ]);
249
+ }
250
+ };
251
+ }
252
+ function createMiddleware(fn) {
253
+ return createMiddlewareInner([
254
+ fn
255
+ ]);
256
+ }
257
+ return createMiddleware;
258
+ }
259
+ /**
260
+ * Create a standalone middleware
261
+ * @link https://trpc.io/docs/v11/server/middlewares#experimental-standalone-middlewares
262
+ */ const experimental_standaloneMiddleware = ()=>({
263
+ create: createMiddlewareFactory()
264
+ });
265
+ /**
266
+ * @internal
267
+ * Please note, `trpc-openapi` uses this function.
268
+ */ function createInputMiddleware(parse) {
269
+ const inputMiddleware = async function inputValidatorMiddleware(opts) {
270
+ let parsedInput;
271
+ const rawInput = await opts.getRawInput();
272
+ try {
273
+ parsedInput = await parse(rawInput);
274
+ } catch (cause) {
275
+ throw new TRPCError({
276
+ code: 'BAD_REQUEST',
277
+ cause
278
+ });
279
+ }
280
+ // Multiple input parsers
281
+ const combinedInput = isObject(opts.input) && isObject(parsedInput) ? {
282
+ ...opts.input,
283
+ ...parsedInput
284
+ } : parsedInput;
285
+ return opts.next({
286
+ input: combinedInput
287
+ });
288
+ };
289
+ inputMiddleware._type = 'input';
290
+ return inputMiddleware;
291
+ }
292
+ /**
293
+ * @internal
294
+ */ function createOutputMiddleware(parse) {
295
+ const outputMiddleware = async function outputValidatorMiddleware({ next }) {
296
+ const result = await next();
297
+ if (!result.ok) {
298
+ // pass through failures without validating
299
+ return result;
300
+ }
301
+ try {
302
+ const data = await parse(result.data);
303
+ return {
304
+ ...result,
305
+ data
306
+ };
307
+ } catch (cause) {
308
+ throw new TRPCError({
309
+ message: 'Output validation failed',
310
+ code: 'INTERNAL_SERVER_ERROR',
311
+ cause
312
+ });
313
+ }
314
+ };
315
+ outputMiddleware._type = 'output';
316
+ return outputMiddleware;
317
+ }
318
+
319
+ // zod / @decs/typeschema
320
+ function getParseFn(procedureParser) {
321
+ const parser = procedureParser;
322
+ if (typeof parser === 'function') {
323
+ // ParserCustomValidatorEsque
324
+ return parser;
325
+ }
326
+ if (typeof parser.parseAsync === 'function') {
327
+ // ParserZodEsque
328
+ return parser.parseAsync.bind(parser);
329
+ }
330
+ if (typeof parser.parse === 'function') {
331
+ // ParserZodEsque
332
+ // ParserValibotEsque (<= v0.12.X)
333
+ return parser.parse.bind(parser);
334
+ }
335
+ if (typeof parser.validateSync === 'function') {
336
+ // ParserYupEsque
337
+ return parser.validateSync.bind(parser);
338
+ }
339
+ if (typeof parser.create === 'function') {
340
+ // ParserSuperstructEsque
341
+ return parser.create.bind(parser);
342
+ }
343
+ if (typeof parser.assert === 'function') {
344
+ // ParserScaleEsque
345
+ return (value)=>{
346
+ parser.assert(value);
347
+ return value;
348
+ };
349
+ }
350
+ throw new Error('Could not find a validator fn');
351
+ }
352
+
353
+ function createNewBuilder(def1, def2) {
354
+ const { middlewares = [], inputs, meta, ...rest } = def2;
355
+ // TODO: maybe have a fn here to warn about calls
356
+ return createBuilder({
357
+ ...mergeWithoutOverrides(def1, rest),
358
+ inputs: [
359
+ ...def1.inputs,
360
+ ...inputs ?? []
361
+ ],
362
+ middlewares: [
363
+ ...def1.middlewares,
364
+ ...middlewares
365
+ ],
366
+ meta: def1.meta && meta ? {
367
+ ...def1.meta,
368
+ ...meta
369
+ } : meta ?? def1.meta
370
+ });
371
+ }
372
+ function createBuilder(initDef = {}) {
373
+ const _def = {
374
+ procedure: true,
375
+ inputs: [],
376
+ middlewares: [],
377
+ ...initDef
378
+ };
379
+ const builder = {
380
+ _def,
381
+ input (input) {
382
+ const parser = getParseFn(input);
383
+ return createNewBuilder(_def, {
384
+ inputs: [
385
+ input
386
+ ],
387
+ middlewares: [
388
+ createInputMiddleware(parser)
389
+ ]
390
+ });
391
+ },
392
+ output (output) {
393
+ const parser = getParseFn(output);
394
+ return createNewBuilder(_def, {
395
+ output,
396
+ middlewares: [
397
+ createOutputMiddleware(parser)
398
+ ]
399
+ });
400
+ },
401
+ meta (meta) {
402
+ return createNewBuilder(_def, {
403
+ meta
404
+ });
405
+ },
406
+ use (middlewareBuilderOrFn) {
407
+ // Distinguish between a middleware builder and a middleware function
408
+ const middlewares = '_middlewares' in middlewareBuilderOrFn ? middlewareBuilderOrFn._middlewares : [
409
+ middlewareBuilderOrFn
410
+ ];
411
+ return createNewBuilder(_def, {
412
+ middlewares: middlewares
413
+ });
414
+ },
415
+ query (resolver) {
416
+ return createResolver({
417
+ ..._def,
418
+ type: 'query'
419
+ }, resolver);
420
+ },
421
+ mutation (resolver) {
422
+ return createResolver({
423
+ ..._def,
424
+ type: 'mutation'
425
+ }, resolver);
426
+ },
427
+ subscription (resolver) {
428
+ return createResolver({
429
+ ..._def,
430
+ type: 'subscription'
431
+ }, resolver);
432
+ }
433
+ };
434
+ return builder;
435
+ }
436
+ function createResolver(_def, resolver) {
437
+ const finalBuilder = createNewBuilder(_def, {
438
+ resolver,
439
+ middlewares: [
440
+ async function resolveMiddleware(opts) {
441
+ const data = await resolver(opts);
442
+ return {
443
+ marker: middlewareMarker,
444
+ ok: true,
445
+ data,
446
+ ctx: opts.ctx
447
+ };
448
+ }
449
+ ]
450
+ });
451
+ return createProcedureCaller(finalBuilder._def);
452
+ }
453
+ const codeblock = `
454
+ This is a client-only function.
455
+ If you want to call this function on the server, see https://trpc.io/docs/v11/server/server-side-calls
456
+ `.trim();
457
+ function createProcedureCaller(_def) {
458
+ async function procedure(opts) {
459
+ // is direct server-side call
460
+ if (!opts || !('getRawInput' in opts)) {
461
+ throw new Error(codeblock);
462
+ }
463
+ // run the middlewares recursively with the resolver as the last one
464
+ async function callRecursive(callOpts = {
465
+ index: 0,
466
+ ctx: opts.ctx
467
+ }) {
468
+ try {
469
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
470
+ const middleware = _def.middlewares[callOpts.index];
471
+ const result = await middleware({
472
+ ctx: callOpts.ctx,
473
+ type: opts.type,
474
+ path: opts.path,
475
+ getRawInput: callOpts.getRawInput ?? opts.getRawInput,
476
+ meta: _def.meta,
477
+ input: callOpts.input,
478
+ next (_nextOpts) {
479
+ const nextOpts = _nextOpts;
480
+ return callRecursive({
481
+ index: callOpts.index + 1,
482
+ ctx: nextOpts && 'ctx' in nextOpts ? {
483
+ ...callOpts.ctx,
484
+ ...nextOpts.ctx
485
+ } : callOpts.ctx,
486
+ input: nextOpts && 'input' in nextOpts ? nextOpts.input : callOpts.input,
487
+ getRawInput: nextOpts && 'getRawInput' in nextOpts ? nextOpts.getRawInput : callOpts.getRawInput
488
+ });
489
+ }
490
+ });
491
+ return result;
492
+ } catch (cause) {
493
+ return {
494
+ ok: false,
495
+ error: getTRPCErrorFromUnknown(cause),
496
+ marker: middlewareMarker
497
+ };
498
+ }
499
+ }
500
+ // there's always at least one "next" since we wrap this.resolver in a middleware
501
+ const result = await callRecursive();
502
+ if (!result) {
503
+ throw new TRPCError({
504
+ code: 'INTERNAL_SERVER_ERROR',
505
+ message: 'No result from middlewares - did you forget to `return next()`?'
506
+ });
507
+ }
508
+ if (!result.ok) {
509
+ // re-throw original error
510
+ throw result.error;
511
+ }
512
+ return result.data;
513
+ }
514
+ procedure._def = _def;
515
+ // FIXME typecast shouldn't be needed - fixittt
516
+ return procedure;
517
+ }
518
+
519
+ /**
520
+ * The default check to see if we're in a server
521
+ */ const isServerDefault = typeof window === 'undefined' || 'Deno' in window || // eslint-disable-next-line @typescript-eslint/dot-notation
522
+ globalThis.process?.env?.['NODE_ENV'] === 'test' || !!globalThis.process?.env?.['JEST_WORKER_ID'] || !!globalThis.process?.env?.['VITEST_WORKER_ID'];
523
+
524
+ /**
525
+ * @internal
526
+ */ function getDataTransformer(transformer) {
527
+ if ('input' in transformer) {
528
+ return transformer;
529
+ }
530
+ return {
531
+ input: transformer,
532
+ output: transformer
533
+ };
534
+ }
535
+ /**
536
+ * @internal
537
+ */ const defaultTransformer = {
538
+ _default: true,
539
+ input: {
540
+ serialize: (obj)=>obj,
541
+ deserialize: (obj)=>obj
542
+ },
543
+ output: {
544
+ serialize: (obj)=>obj,
545
+ deserialize: (obj)=>obj
546
+ }
547
+ };
548
+ function transformTRPCResponseItem(config, item) {
549
+ if ('error' in item) {
550
+ return {
551
+ ...item,
552
+ error: config.transformer.output.serialize(item.error)
553
+ };
554
+ }
555
+ if ('data' in item.result) {
556
+ return {
557
+ ...item,
558
+ result: {
559
+ ...item.result,
560
+ data: config.transformer.output.serialize(item.result.data)
561
+ }
562
+ };
563
+ }
564
+ return item;
565
+ }
566
+ /**
567
+ * Takes a unserialized `TRPCResponse` and serializes it with the router's transformers
568
+ **/ function transformTRPCResponse(config, itemOrItems) {
569
+ return Array.isArray(itemOrItems) ? itemOrItems.map((item)=>transformTRPCResponseItem(config, item)) : transformTRPCResponseItem(config, itemOrItems);
570
+ }
571
+
572
+ function isRouter(procedureOrRouter) {
573
+ return 'router' in procedureOrRouter._def;
574
+ }
575
+ const emptyRouter = {
576
+ _ctx: null,
577
+ _errorShape: null,
578
+ _meta: null,
579
+ queries: {},
580
+ mutations: {},
581
+ subscriptions: {},
582
+ errorFormatter: defaultFormatter,
583
+ transformer: defaultTransformer
584
+ };
585
+ /**
586
+ * Reserved words that can't be used as router or procedure names
587
+ */ const reservedWords = [
588
+ /**
589
+ * Then is a reserved word because otherwise we can't return a promise that returns a Proxy
590
+ * since JS will think that `.then` is something that exists
591
+ */ 'then'
592
+ ];
593
+ /**
594
+ * @internal
595
+ */ function createRouterFactory(config) {
596
+ return function createRouterInner(procedures) {
597
+ const reservedWordsUsed = new Set(Object.keys(procedures).filter((v)=>reservedWords.includes(v)));
598
+ if (reservedWordsUsed.size > 0) {
599
+ throw new Error('Reserved words used in `router({})` call: ' + Array.from(reservedWordsUsed).join(', '));
600
+ }
601
+ const routerProcedures = omitPrototype({});
602
+ function recursiveGetPaths(procedures, path = '') {
603
+ for (const [key, procedureOrRouter] of Object.entries(procedures ?? {})){
604
+ const newPath = `${path}${key}`;
605
+ if (isRouter(procedureOrRouter)) {
606
+ recursiveGetPaths(procedureOrRouter._def.procedures, `${newPath}.`);
607
+ continue;
608
+ }
609
+ if (routerProcedures[newPath]) {
610
+ throw new Error(`Duplicate key: ${newPath}`);
611
+ }
612
+ routerProcedures[newPath] = procedureOrRouter;
613
+ }
614
+ }
615
+ recursiveGetPaths(procedures);
616
+ const _def = {
617
+ _config: config,
618
+ router: true,
619
+ procedures: routerProcedures,
620
+ ...emptyRouter,
621
+ record: procedures
622
+ };
623
+ const router = {
624
+ ...procedures,
625
+ _def,
626
+ createCaller (ctx) {
627
+ const proxy = createRecursiveProxy(({ path, args })=>{
628
+ const fullPath = path.join('.');
629
+ const procedure = _def.procedures[fullPath];
630
+ return procedure({
631
+ path: fullPath,
632
+ getRawInput: async ()=>args[0],
633
+ ctx,
634
+ type: procedure._def.type
635
+ });
636
+ });
637
+ return proxy;
638
+ }
639
+ };
640
+ return router;
641
+ };
642
+ }
643
+ function isProcedure(procedureOrRouter) {
644
+ return !!procedureOrRouter._def.procedure;
645
+ }
646
+ /**
647
+ * @internal
648
+ */ function callProcedure(opts) {
649
+ const { type, path } = opts;
650
+ const proc = opts.procedures[path];
651
+ if (!proc || !isProcedure(proc) || proc._def.type !== type) {
652
+ throw new TRPCError({
653
+ code: 'NOT_FOUND',
654
+ message: `No "${type}"-procedure on path "${path}"`
655
+ });
656
+ }
657
+ return proc(opts);
658
+ }
659
+ function createCallerFactory() {
660
+ return function createCallerInner(router) {
661
+ const _def = router._def;
662
+ return function createCaller(maybeContext) {
663
+ const proxy = createRecursiveProxy(({ path, args })=>{
664
+ const fullPath = path.join('.');
665
+ const procedure = _def.procedures[fullPath];
666
+ const callProc = (ctx)=>procedure({
667
+ path: fullPath,
668
+ getRawInput: async ()=>args[0],
669
+ ctx,
670
+ type: procedure._def.type
671
+ });
672
+ if (typeof maybeContext === 'function') {
673
+ const context = maybeContext();
674
+ if (context instanceof Promise) {
675
+ return context.then(callProc);
676
+ }
677
+ return callProc(context);
678
+ }
679
+ return callProc(maybeContext);
680
+ });
681
+ return proxy;
682
+ };
683
+ };
684
+ }
685
+ function mergeRouters(...routerList) {
686
+ const record = mergeWithoutOverrides({}, ...routerList.map((r)=>r._def.record));
687
+ const errorFormatter = routerList.reduce((currentErrorFormatter, nextRouter)=>{
688
+ if (nextRouter._def._config.errorFormatter && nextRouter._def._config.errorFormatter !== defaultFormatter) {
689
+ if (currentErrorFormatter !== defaultFormatter && currentErrorFormatter !== nextRouter._def._config.errorFormatter) {
690
+ throw new Error('You seem to have several error formatters');
691
+ }
692
+ return nextRouter._def._config.errorFormatter;
693
+ }
694
+ return currentErrorFormatter;
695
+ }, defaultFormatter);
696
+ const transformer = routerList.reduce((prev, current)=>{
697
+ if (current._def._config.transformer && current._def._config.transformer !== defaultTransformer) {
698
+ if (prev !== defaultTransformer && prev !== current._def._config.transformer) {
699
+ throw new Error('You seem to have several transformers');
700
+ }
701
+ return current._def._config.transformer;
702
+ }
703
+ return prev;
704
+ }, defaultTransformer);
705
+ const router = createRouterFactory({
706
+ errorFormatter,
707
+ transformer,
708
+ isDev: routerList.some((r)=>r._def._config.isDev),
709
+ allowOutsideOfServer: routerList.some((r)=>r._def._config.allowOutsideOfServer),
710
+ isServer: routerList.some((r)=>r._def._config.isServer),
711
+ $types: routerList[0]?._def._config.$types
712
+ })(record);
713
+ return router;
714
+ }
715
+
716
+ /**
717
+ * TODO: This can be improved:
718
+ * - We should be able to chain `.meta()`/`.context()` only once
719
+ * - Simplify typings
720
+ * - Doesn't need to be a class but it doesn't really hurt either
721
+ */ class TRPCBuilder {
722
+ /**
723
+ * Add a context shape as a generic to the root object
724
+ * @link https://trpc.io/docs/v11/server/context
725
+ */ context() {
726
+ return new TRPCBuilder();
727
+ }
728
+ /**
729
+ * Add a meta shape as a generic to the root object
730
+ * @link https://trpc.io/docs/v11/quickstart
731
+ */ meta() {
732
+ return new TRPCBuilder();
733
+ }
734
+ /**
735
+ * Create the root object
736
+ * @link https://trpc.io/docs/v11/server/routers#initialize-trpc
737
+ */ create(options) {
738
+ return createTRPCInner()(options);
739
+ }
740
+ }
741
+ /**
742
+ * Builder to initialize the tRPC root object - use this exactly once per backend
743
+ * @link https://trpc.io/docs/v11/quickstart
744
+ */ const initTRPC = new TRPCBuilder();
745
+ function createTRPCInner() {
746
+ return function initTRPCInner(runtime) {
747
+ const errorFormatter = runtime?.errorFormatter ?? defaultFormatter;
748
+ const transformer = getDataTransformer(runtime?.transformer ?? defaultTransformer);
749
+ const config = {
750
+ transformer,
751
+ isDev: runtime?.isDev ?? // eslint-disable-next-line @typescript-eslint/dot-notation
752
+ globalThis.process?.env?.['NODE_ENV'] !== 'production',
753
+ allowOutsideOfServer: runtime?.allowOutsideOfServer ?? false,
754
+ errorFormatter,
755
+ isServer: runtime?.isServer ?? isServerDefault,
756
+ /**
757
+ * @internal
758
+ */ $types: createFlatProxy((key)=>{
759
+ throw new Error(`Tried to access "$types.${key}" which is not available at runtime`);
760
+ })
761
+ };
762
+ {
763
+ // Server check
764
+ const isServer = runtime?.isServer ?? isServerDefault;
765
+ if (!isServer && runtime?.allowOutsideOfServer !== true) {
766
+ throw new Error(`You're trying to use @trpc/server in a non-server environment. This is not supported by default.`);
767
+ }
768
+ }
769
+ return {
770
+ /**
771
+ * These are just types, they can't be used
772
+ * @internal
773
+ */ _config: config,
774
+ /**
775
+ * Builder object for creating procedures
776
+ * @link https://trpc.io/docs/v11/server/procedures
777
+ */ procedure: createBuilder({
778
+ meta: runtime?.defaultMeta
779
+ }),
780
+ /**
781
+ * Create reusable middlewares
782
+ * @link https://trpc.io/docs/v11/server/middlewares
783
+ */ middleware: createMiddlewareFactory(),
784
+ /**
785
+ * Create a router
786
+ * @link https://trpc.io/docs/v11/server/routers
787
+ */ router: createRouterFactory(config),
788
+ /**
789
+ * Merge Routers
790
+ * @link https://trpc.io/docs/v11/server/merging-routers
791
+ */ mergeRouters,
792
+ /**
793
+ * Create a server-side caller for a router
794
+ * @link https://trpc.io/docs/v11/server/server-side-calls
795
+ */ createCallerFactory: createCallerFactory()
796
+ };
797
+ };
798
+ }
799
+
800
+ exports.TRPCError = TRPCError;
801
+ exports.callProcedure = callProcedure;
802
+ exports.callTRPCProcedure = callProcedure;
803
+ exports.createTRPCFlatProxy = createFlatProxy;
804
+ exports.experimental_standaloneMiddleware = experimental_standaloneMiddleware;
805
+ exports.experimental_trpcMiddleware = experimental_standaloneMiddleware;
806
+ exports.getErrorShape = getErrorShape;
807
+ exports.getTRPCErrorFromUnknown = getTRPCErrorFromUnknown;
808
+ exports.initTRPC = initTRPC;
809
+ exports.transformTRPCResponse = transformTRPCResponse;