@tanstack/start-client-core 1.20.3-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +12 -0
  3. package/dist/cjs/createIsomorphicFn.cjs +7 -0
  4. package/dist/cjs/createIsomorphicFn.cjs.map +1 -0
  5. package/dist/cjs/createIsomorphicFn.d.cts +12 -0
  6. package/dist/cjs/createMiddleware.cjs +37 -0
  7. package/dist/cjs/createMiddleware.cjs.map +1 -0
  8. package/dist/cjs/createMiddleware.d.cts +175 -0
  9. package/dist/cjs/createServerFn.cjs +378 -0
  10. package/dist/cjs/createServerFn.cjs.map +1 -0
  11. package/dist/cjs/createServerFn.d.cts +159 -0
  12. package/dist/cjs/envOnly.cjs +7 -0
  13. package/dist/cjs/envOnly.cjs.map +1 -0
  14. package/dist/cjs/envOnly.d.cts +4 -0
  15. package/dist/cjs/headers.cjs +30 -0
  16. package/dist/cjs/headers.cjs.map +1 -0
  17. package/dist/cjs/headers.d.cts +5 -0
  18. package/dist/cjs/index.cjs +33 -0
  19. package/dist/cjs/index.cjs.map +1 -0
  20. package/dist/cjs/index.d.cts +11 -0
  21. package/dist/cjs/json.cjs +14 -0
  22. package/dist/cjs/json.cjs.map +1 -0
  23. package/dist/cjs/json.d.cts +2 -0
  24. package/dist/cjs/registerGlobalMiddleware.cjs +9 -0
  25. package/dist/cjs/registerGlobalMiddleware.cjs.map +1 -0
  26. package/dist/cjs/registerGlobalMiddleware.d.cts +5 -0
  27. package/dist/cjs/serializer.cjs +152 -0
  28. package/dist/cjs/serializer.cjs.map +1 -0
  29. package/dist/cjs/serializer.d.cts +2 -0
  30. package/dist/cjs/ssr-client.cjs +130 -0
  31. package/dist/cjs/ssr-client.cjs.map +1 -0
  32. package/dist/cjs/ssr-client.d.cts +64 -0
  33. package/dist/cjs/tests/createIsomorphicFn.test-d.d.cts +1 -0
  34. package/dist/cjs/tests/createServerFn.test-d.d.cts +1 -0
  35. package/dist/cjs/tests/createServerMiddleware.test-d.d.cts +1 -0
  36. package/dist/cjs/tests/envOnly.test-d.d.cts +1 -0
  37. package/dist/cjs/tests/json.test.d.cts +1 -0
  38. package/dist/cjs/tests/transformer.test.d.cts +1 -0
  39. package/dist/esm/createIsomorphicFn.d.ts +12 -0
  40. package/dist/esm/createIsomorphicFn.js +7 -0
  41. package/dist/esm/createIsomorphicFn.js.map +1 -0
  42. package/dist/esm/createMiddleware.d.ts +175 -0
  43. package/dist/esm/createMiddleware.js +37 -0
  44. package/dist/esm/createMiddleware.js.map +1 -0
  45. package/dist/esm/createServerFn.d.ts +159 -0
  46. package/dist/esm/createServerFn.js +356 -0
  47. package/dist/esm/createServerFn.js.map +1 -0
  48. package/dist/esm/envOnly.d.ts +4 -0
  49. package/dist/esm/envOnly.js +7 -0
  50. package/dist/esm/envOnly.js.map +1 -0
  51. package/dist/esm/headers.d.ts +5 -0
  52. package/dist/esm/headers.js +30 -0
  53. package/dist/esm/headers.js.map +1 -0
  54. package/dist/esm/index.d.ts +11 -0
  55. package/dist/esm/index.js +30 -0
  56. package/dist/esm/index.js.map +1 -0
  57. package/dist/esm/json.d.ts +2 -0
  58. package/dist/esm/json.js +14 -0
  59. package/dist/esm/json.js.map +1 -0
  60. package/dist/esm/registerGlobalMiddleware.d.ts +5 -0
  61. package/dist/esm/registerGlobalMiddleware.js +9 -0
  62. package/dist/esm/registerGlobalMiddleware.js.map +1 -0
  63. package/dist/esm/serializer.d.ts +2 -0
  64. package/dist/esm/serializer.js +152 -0
  65. package/dist/esm/serializer.js.map +1 -0
  66. package/dist/esm/ssr-client.d.ts +64 -0
  67. package/dist/esm/ssr-client.js +130 -0
  68. package/dist/esm/ssr-client.js.map +1 -0
  69. package/dist/esm/tests/createIsomorphicFn.test-d.d.ts +1 -0
  70. package/dist/esm/tests/createServerFn.test-d.d.ts +1 -0
  71. package/dist/esm/tests/createServerMiddleware.test-d.d.ts +1 -0
  72. package/dist/esm/tests/envOnly.test-d.d.ts +1 -0
  73. package/dist/esm/tests/json.test.d.ts +1 -0
  74. package/dist/esm/tests/transformer.test.d.ts +1 -0
  75. package/package.json +56 -0
  76. package/src/createIsomorphicFn.ts +36 -0
  77. package/src/createMiddleware.ts +706 -0
  78. package/src/createServerFn.ts +1004 -0
  79. package/src/envOnly.ts +9 -0
  80. package/src/headers.ts +50 -0
  81. package/src/index.tsx +88 -0
  82. package/src/json.ts +15 -0
  83. package/src/registerGlobalMiddleware.ts +9 -0
  84. package/src/serializer.ts +177 -0
  85. package/src/ssr-client.tsx +243 -0
  86. package/src/tests/createIsomorphicFn.test-d.ts +72 -0
  87. package/src/tests/createServerFn.test-d.ts +519 -0
  88. package/src/tests/createServerMiddleware.test-d.ts +736 -0
  89. package/src/tests/envOnly.test-d.ts +34 -0
  90. package/src/tests/json.test.ts +37 -0
  91. package/src/tests/transformer.test.tsx +147 -0
@@ -0,0 +1,706 @@
1
+ import type {
2
+ ConstrainValidator,
3
+ Method,
4
+ ServerFnResponseType,
5
+ ServerFnTypeOrTypeFn,
6
+ } from './createServerFn'
7
+ import type {
8
+ Assign,
9
+ Constrain,
10
+ Expand,
11
+ IntersectAssign,
12
+ ResolveValidatorInput,
13
+ ResolveValidatorOutput,
14
+ SerializerStringify,
15
+ } from '@tanstack/router-core'
16
+
17
+ export function createMiddleware<TType extends MiddlewareType>(
18
+ options: {
19
+ type: TType
20
+ validateClient?: boolean
21
+ },
22
+ __opts?: FunctionMiddlewareOptions<
23
+ unknown,
24
+ undefined,
25
+ undefined,
26
+ undefined,
27
+ ServerFnResponseType
28
+ >,
29
+ ): CreateMiddlewareResult<TType> {
30
+ // const resolvedOptions = (__opts || options) as MiddlewareOptions<
31
+ const resolvedOptions = {
32
+ type: 'function',
33
+ ...(__opts ||
34
+ (options as FunctionMiddlewareOptions<
35
+ unknown,
36
+ undefined,
37
+ undefined,
38
+ undefined,
39
+ ServerFnResponseType
40
+ >)),
41
+ }
42
+
43
+ return {
44
+ options: resolvedOptions,
45
+ middleware: (middleware: any) => {
46
+ return createMiddleware(
47
+ {} as any,
48
+ Object.assign(resolvedOptions, { middleware }),
49
+ ) as any
50
+ },
51
+ validator: (validator: any) => {
52
+ return createMiddleware(
53
+ {} as any,
54
+ Object.assign(resolvedOptions, { validator }),
55
+ ) as any
56
+ },
57
+ client: (client: any) => {
58
+ return createMiddleware(
59
+ {} as any,
60
+ Object.assign(resolvedOptions, { client }),
61
+ ) as any
62
+ },
63
+ server: (server: any) => {
64
+ return createMiddleware(
65
+ {} as any,
66
+ Object.assign(resolvedOptions, { server }),
67
+ ) as any
68
+ },
69
+ } as unknown as CreateMiddlewareResult<TType>
70
+ }
71
+
72
+ export type MiddlewareType = 'request' | 'function'
73
+
74
+ export type CreateMiddlewareResult<TType extends MiddlewareType> =
75
+ 'function' extends TType
76
+ ? FunctionMiddleware<ServerFnResponseType>
77
+ : RequestMiddleware
78
+
79
+ export interface FunctionMiddleware<
80
+ TServerFnResponseType extends ServerFnResponseType,
81
+ > extends FunctionMiddlewareAfterMiddleware<unknown, TServerFnResponseType> {
82
+ middleware: <const TNewMiddlewares = undefined>(
83
+ middlewares: Constrain<
84
+ TNewMiddlewares,
85
+ ReadonlyArray<AnyFunctionMiddleware>
86
+ >,
87
+ ) => FunctionMiddlewareAfterMiddleware<TNewMiddlewares, TServerFnResponseType>
88
+ }
89
+
90
+ export interface FunctionMiddlewareAfterMiddleware<
91
+ TMiddlewares,
92
+ TServerFnResponseType extends ServerFnResponseType,
93
+ > extends FunctionMiddlewareWithTypes<
94
+ TMiddlewares,
95
+ undefined,
96
+ undefined,
97
+ undefined,
98
+ undefined,
99
+ undefined,
100
+ TServerFnResponseType
101
+ >,
102
+ FunctionMiddlewareServer<
103
+ TMiddlewares,
104
+ undefined,
105
+ undefined,
106
+ undefined,
107
+ TServerFnResponseType
108
+ >,
109
+ FunctionMiddlewareClient<TMiddlewares, undefined, TServerFnResponseType>,
110
+ FunctionMiddlewareValidator<TMiddlewares, TServerFnResponseType> {}
111
+
112
+ export interface FunctionMiddlewareWithTypes<
113
+ TMiddlewares,
114
+ TValidator,
115
+ TServerContext,
116
+ TServerSendContext,
117
+ TClientContext,
118
+ TClientSendContext,
119
+ TServerFnResponseType extends ServerFnResponseType,
120
+ > {
121
+ _types: FunctionMiddlewareTypes<
122
+ TMiddlewares,
123
+ TValidator,
124
+ TServerContext,
125
+ TServerSendContext,
126
+ TClientContext,
127
+ TClientSendContext
128
+ >
129
+ options: FunctionMiddlewareOptions<
130
+ TMiddlewares,
131
+ TValidator,
132
+ TServerContext,
133
+ TClientContext,
134
+ TServerFnResponseType
135
+ >
136
+ }
137
+
138
+ export interface FunctionMiddlewareTypes<
139
+ in out TMiddlewares,
140
+ in out TValidator,
141
+ in out TServerContext,
142
+ in out TServerSendContext,
143
+ in out TClientContext,
144
+ in out TClientSendContext,
145
+ > {
146
+ type: 'function'
147
+ middlewares: TMiddlewares
148
+ input: ResolveValidatorInput<TValidator>
149
+ allInput: IntersectAllValidatorInputs<TMiddlewares, TValidator>
150
+ output: ResolveValidatorOutput<TValidator>
151
+ allOutput: IntersectAllValidatorOutputs<TMiddlewares, TValidator>
152
+ clientContext: TClientContext
153
+ allClientContextBeforeNext: AssignAllClientContextBeforeNext<
154
+ TMiddlewares,
155
+ TClientContext
156
+ >
157
+ allClientContextAfterNext: AssignAllClientContextAfterNext<
158
+ TMiddlewares,
159
+ TClientContext,
160
+ TClientSendContext
161
+ >
162
+ serverContext: TServerContext
163
+ serverSendContext: TServerSendContext
164
+ allServerSendContext: AssignAllServerSendContext<
165
+ TMiddlewares,
166
+ TServerSendContext
167
+ >
168
+ allServerContext: AssignAllServerContext<
169
+ TMiddlewares,
170
+ TServerSendContext,
171
+ TServerContext
172
+ >
173
+ clientSendContext: TClientSendContext
174
+ allClientSendContext: AssignAllClientSendContext<
175
+ TMiddlewares,
176
+ TClientSendContext
177
+ >
178
+ validator: TValidator
179
+ }
180
+
181
+ /**
182
+ * Recursively resolve the input type produced by a sequence of middleware
183
+ */
184
+ export type IntersectAllValidatorInputs<TMiddlewares, TValidator> =
185
+ unknown extends TValidator
186
+ ? TValidator
187
+ : TValidator extends undefined
188
+ ? IntersectAllMiddleware<TMiddlewares, 'allInput'>
189
+ : IntersectAssign<
190
+ IntersectAllMiddleware<TMiddlewares, 'allInput'>,
191
+ ResolveValidatorInput<TValidator>
192
+ >
193
+
194
+ export type IntersectAllMiddleware<
195
+ TMiddlewares,
196
+ TType extends
197
+ | keyof AnyFunctionMiddleware['_types']
198
+ | keyof AnyRequestMiddleware['_types'],
199
+ TAcc = undefined,
200
+ > = TMiddlewares extends readonly [infer TMiddleware, ...infer TRest]
201
+ ? TMiddleware extends AnyFunctionMiddleware | AnyRequestMiddleware
202
+ ? IntersectAllMiddleware<
203
+ TRest,
204
+ TType,
205
+ IntersectAssign<
206
+ TAcc,
207
+ TMiddleware['_types'][TType & keyof TMiddleware['_types']]
208
+ >
209
+ >
210
+ : TAcc
211
+ : TAcc
212
+
213
+ export type AnyFunctionMiddleware = FunctionMiddlewareWithTypes<
214
+ any,
215
+ any,
216
+ any,
217
+ any,
218
+ any,
219
+ any,
220
+ any
221
+ >
222
+
223
+ /**
224
+ * Recursively merge the output type produced by a sequence of middleware
225
+ */
226
+ export type IntersectAllValidatorOutputs<TMiddlewares, TValidator> =
227
+ unknown extends TValidator
228
+ ? TValidator
229
+ : TValidator extends undefined
230
+ ? IntersectAllMiddleware<TMiddlewares, 'allOutput'>
231
+ : IntersectAssign<
232
+ IntersectAllMiddleware<TMiddlewares, 'allOutput'>,
233
+ ResolveValidatorOutput<TValidator>
234
+ >
235
+
236
+ /**
237
+ * Recursively resolve the client context type produced by a sequence of middleware
238
+ */
239
+ export type AssignAllClientContextBeforeNext<
240
+ TMiddlewares,
241
+ TClientContext = undefined,
242
+ > = unknown extends TClientContext
243
+ ? TClientContext
244
+ : Assign<
245
+ AssignAllMiddleware<TMiddlewares, 'allClientContextBeforeNext'>,
246
+ TClientContext
247
+ >
248
+
249
+ export type AssignAllMiddleware<
250
+ TMiddlewares,
251
+ TType extends
252
+ | keyof AnyFunctionMiddleware['_types']
253
+ | keyof AnyRequestMiddleware['_types'],
254
+ TAcc = undefined,
255
+ > = TMiddlewares extends readonly [infer TMiddleware, ...infer TRest]
256
+ ? TMiddleware extends AnyFunctionMiddleware | AnyRequestMiddleware
257
+ ? AssignAllMiddleware<
258
+ TRest,
259
+ TType,
260
+ Assign<TAcc, TMiddleware['_types'][TType & keyof TMiddleware['_types']]>
261
+ >
262
+ : TAcc
263
+ : TAcc
264
+
265
+ export type AssignAllClientContextAfterNext<
266
+ TMiddlewares,
267
+ TClientContext = undefined,
268
+ TSendContext = undefined,
269
+ > = unknown extends TClientContext
270
+ ? Assign<TClientContext, TSendContext>
271
+ : Assign<
272
+ AssignAllMiddleware<TMiddlewares, 'allClientContextAfterNext'>,
273
+ Assign<TClientContext, TSendContext>
274
+ >
275
+
276
+ export type AssignAllServerSendContext<
277
+ TMiddlewares,
278
+ TSendContext = undefined,
279
+ > = unknown extends TSendContext
280
+ ? TSendContext
281
+ : Assign<
282
+ AssignAllMiddleware<TMiddlewares, 'allServerSendContext'>,
283
+ TSendContext
284
+ >
285
+
286
+ /**
287
+ * Recursively resolve the server context type produced by a sequence of middleware
288
+ */
289
+ export type AssignAllServerContext<
290
+ TMiddlewares,
291
+ TSendContext = undefined,
292
+ TServerContext = undefined,
293
+ > = unknown extends TSendContext
294
+ ? Assign<TSendContext, TServerContext>
295
+ : Assign<
296
+ AssignAllMiddleware<TMiddlewares, 'allServerContext'>,
297
+ Assign<TSendContext, TServerContext>
298
+ >
299
+
300
+ export type AssignAllClientSendContext<
301
+ TMiddlewares,
302
+ TSendContext = undefined,
303
+ > = unknown extends TSendContext
304
+ ? TSendContext
305
+ : Assign<
306
+ AssignAllMiddleware<TMiddlewares, 'allClientSendContext'>,
307
+ TSendContext
308
+ >
309
+
310
+ export interface FunctionMiddlewareOptions<
311
+ in out TMiddlewares,
312
+ in out TValidator,
313
+ in out TServerContext,
314
+ in out TClientContext,
315
+ in out TServerFnResponseType extends ServerFnResponseType,
316
+ > {
317
+ validateClient?: boolean
318
+ middleware?: TMiddlewares
319
+ validator?: ConstrainValidator<TValidator>
320
+ client?: FunctionMiddlewareClientFn<
321
+ TMiddlewares,
322
+ TValidator,
323
+ TServerContext,
324
+ TClientContext,
325
+ TServerFnResponseType
326
+ >
327
+ server?: FunctionMiddlewareServerFn<
328
+ TMiddlewares,
329
+ TValidator,
330
+ TServerContext,
331
+ unknown,
332
+ unknown,
333
+ TServerFnResponseType
334
+ >
335
+ }
336
+
337
+ export type FunctionMiddlewareClientNextFn<TMiddlewares> = <
338
+ TSendContext = undefined,
339
+ TNewClientContext = undefined,
340
+ >(ctx?: {
341
+ context?: TNewClientContext
342
+ sendContext?: SerializerStringify<TSendContext>
343
+ headers?: HeadersInit
344
+ }) => Promise<
345
+ FunctionClientResultWithContext<TMiddlewares, TSendContext, TNewClientContext>
346
+ >
347
+
348
+ export interface FunctionMiddlewareServer<
349
+ TMiddlewares,
350
+ TValidator,
351
+ TServerSendContext,
352
+ TClientContext,
353
+ TServerFnResponseType extends ServerFnResponseType,
354
+ > {
355
+ server: <TNewServerContext = undefined, TSendContext = undefined>(
356
+ server: FunctionMiddlewareServerFn<
357
+ TMiddlewares,
358
+ TValidator,
359
+ TServerSendContext,
360
+ TNewServerContext,
361
+ TSendContext,
362
+ TServerFnResponseType
363
+ >,
364
+ ) => FunctionMiddlewareAfterServer<
365
+ TMiddlewares,
366
+ TValidator,
367
+ TNewServerContext,
368
+ TServerSendContext,
369
+ TClientContext,
370
+ TSendContext,
371
+ ServerFnResponseType
372
+ >
373
+ }
374
+ export type FunctionMiddlewareServerFn<
375
+ TMiddlewares,
376
+ TValidator,
377
+ TServerSendContext,
378
+ TNewServerContext,
379
+ TSendContext,
380
+ TServerFnResponseType extends ServerFnResponseType,
381
+ > = (
382
+ options: FunctionMiddlewareServerFnOptions<
383
+ TMiddlewares,
384
+ TValidator,
385
+ TServerSendContext,
386
+ TServerFnResponseType
387
+ >,
388
+ ) => FunctionMiddlewareServerFnResult<
389
+ TMiddlewares,
390
+ TServerSendContext,
391
+ TNewServerContext,
392
+ TSendContext
393
+ >
394
+
395
+ export interface RequestMiddlewareServerFnOptions<
396
+ in out TMiddlewares,
397
+ in out TServerSendContext,
398
+ > {
399
+ request: Request
400
+ context: Expand<AssignAllServerContext<TMiddlewares, TServerSendContext>>
401
+ next: FunctionMiddlewareServerNextFn<TMiddlewares, TServerSendContext>
402
+ response: Response
403
+ method: Method
404
+ signal: AbortSignal
405
+ }
406
+
407
+ export type FunctionMiddlewareServerNextFn<TMiddlewares, TServerSendContext> = <
408
+ TNewServerContext = undefined,
409
+ TSendContext = undefined,
410
+ >(ctx?: {
411
+ context?: TNewServerContext
412
+ sendContext?: SerializerStringify<TSendContext>
413
+ }) => Promise<
414
+ FunctionServerResultWithContext<
415
+ TMiddlewares,
416
+ TServerSendContext,
417
+ TNewServerContext,
418
+ TSendContext
419
+ >
420
+ >
421
+
422
+ export type FunctionServerResultWithContext<
423
+ in out TMiddlewares,
424
+ in out TServerSendContext,
425
+ in out TServerContext,
426
+ in out TSendContext,
427
+ > = {
428
+ 'use functions must return the result of next()': true
429
+ _types: {
430
+ context: TServerContext
431
+ sendContext: TSendContext
432
+ }
433
+ context: Expand<
434
+ AssignAllServerContext<TMiddlewares, TServerSendContext, TServerContext>
435
+ >
436
+ sendContext: Expand<AssignAllClientSendContext<TMiddlewares, TSendContext>>
437
+ }
438
+
439
+ export interface FunctionMiddlewareServerFnOptions<
440
+ in out TMiddlewares,
441
+ in out TValidator,
442
+ in out TServerSendContext,
443
+ in out TServerFnResponseType,
444
+ > {
445
+ data: Expand<IntersectAllValidatorOutputs<TMiddlewares, TValidator>>
446
+ context: Expand<AssignAllServerContext<TMiddlewares, TServerSendContext>>
447
+ next: FunctionMiddlewareServerNextFn<TMiddlewares, TServerSendContext>
448
+ response: TServerFnResponseType
449
+ method: Method
450
+ filename: string
451
+ functionId: string
452
+ signal: AbortSignal
453
+ }
454
+
455
+ export type FunctionMiddlewareServerFnResult<
456
+ TMiddlewares,
457
+ TServerSendContext,
458
+ TServerContext,
459
+ TSendContext,
460
+ > =
461
+ | Promise<
462
+ FunctionServerResultWithContext<
463
+ TMiddlewares,
464
+ TServerSendContext,
465
+ TServerContext,
466
+ TSendContext
467
+ >
468
+ >
469
+ | FunctionServerResultWithContext<
470
+ TMiddlewares,
471
+ TServerSendContext,
472
+ TServerContext,
473
+ TSendContext
474
+ >
475
+
476
+ export interface FunctionMiddlewareAfterServer<
477
+ TMiddlewares,
478
+ TValidator,
479
+ TServerContext,
480
+ TServerSendContext,
481
+ TClientContext,
482
+ TClientSendContext,
483
+ TServerFnResponseType extends ServerFnResponseType,
484
+ > extends FunctionMiddlewareWithTypes<
485
+ TMiddlewares,
486
+ TValidator,
487
+ TServerContext,
488
+ TServerSendContext,
489
+ TClientContext,
490
+ TClientSendContext,
491
+ TServerFnResponseType
492
+ > {}
493
+
494
+ export interface FunctionMiddlewareClient<
495
+ TMiddlewares,
496
+ TValidator,
497
+ TServerFnResponseType extends ServerFnResponseType,
498
+ > {
499
+ client: <TSendServerContext = undefined, TNewClientContext = undefined>(
500
+ client: FunctionMiddlewareClientFn<
501
+ TMiddlewares,
502
+ TValidator,
503
+ TSendServerContext,
504
+ TNewClientContext,
505
+ TServerFnResponseType
506
+ >,
507
+ ) => FunctionMiddlewareAfterClient<
508
+ TMiddlewares,
509
+ TValidator,
510
+ TSendServerContext,
511
+ TNewClientContext,
512
+ ServerFnResponseType
513
+ >
514
+ }
515
+
516
+ export type FunctionMiddlewareClientFn<
517
+ TMiddlewares,
518
+ TValidator,
519
+ TSendContext,
520
+ TClientContext,
521
+ TServerFnResponseType extends ServerFnResponseType,
522
+ > = (
523
+ options: FunctionMiddlewareClientFnOptions<
524
+ TMiddlewares,
525
+ TValidator,
526
+ TServerFnResponseType
527
+ >,
528
+ ) => FunctionMiddlewareClientFnResult<
529
+ TMiddlewares,
530
+ TSendContext,
531
+ TClientContext
532
+ >
533
+
534
+ export interface FunctionMiddlewareClientFnOptions<
535
+ in out TMiddlewares,
536
+ in out TValidator,
537
+ in out TServerFnResponseType extends ServerFnResponseType,
538
+ > {
539
+ data: Expand<IntersectAllValidatorInputs<TMiddlewares, TValidator>>
540
+ context: Expand<AssignAllClientContextBeforeNext<TMiddlewares>>
541
+ sendContext: Expand<AssignAllServerSendContext<TMiddlewares>>
542
+ method: Method
543
+ response: TServerFnResponseType
544
+ signal: AbortSignal
545
+ next: FunctionMiddlewareClientNextFn<TMiddlewares>
546
+ filename: string
547
+ functionId: string
548
+ type: ServerFnTypeOrTypeFn<
549
+ Method,
550
+ TServerFnResponseType,
551
+ TMiddlewares,
552
+ TValidator
553
+ >
554
+ }
555
+
556
+ export type FunctionMiddlewareClientFnResult<
557
+ TMiddlewares,
558
+ TSendContext,
559
+ TClientContext,
560
+ > =
561
+ | Promise<
562
+ FunctionClientResultWithContext<
563
+ TMiddlewares,
564
+ TSendContext,
565
+ TClientContext
566
+ >
567
+ >
568
+ | FunctionClientResultWithContext<TMiddlewares, TSendContext, TClientContext>
569
+
570
+ export type FunctionClientResultWithContext<
571
+ in out TMiddlewares,
572
+ in out TSendContext,
573
+ in out TClientContext,
574
+ > = {
575
+ 'use functions must return the result of next()': true
576
+ context: Expand<AssignAllClientContextAfterNext<TMiddlewares, TClientContext>>
577
+ sendContext: Expand<AssignAllServerSendContext<TMiddlewares, TSendContext>>
578
+ headers: HeadersInit
579
+ }
580
+
581
+ export interface FunctionMiddlewareAfterClient<
582
+ TMiddlewares,
583
+ TValidator,
584
+ TServerSendContext,
585
+ TClientContext,
586
+ TServerFnResponseType extends ServerFnResponseType,
587
+ > extends FunctionMiddlewareWithTypes<
588
+ TMiddlewares,
589
+ TValidator,
590
+ undefined,
591
+ TServerSendContext,
592
+ TClientContext,
593
+ undefined,
594
+ TServerFnResponseType
595
+ >,
596
+ FunctionMiddlewareServer<
597
+ TMiddlewares,
598
+ TValidator,
599
+ TServerSendContext,
600
+ TClientContext,
601
+ TServerFnResponseType
602
+ > {}
603
+
604
+ export interface FunctionMiddlewareValidator<
605
+ TMiddlewares,
606
+ TServerFnResponseType extends ServerFnResponseType,
607
+ > {
608
+ validator: <TNewValidator>(
609
+ input: ConstrainValidator<TNewValidator>,
610
+ ) => FunctionMiddlewareAfterValidator<
611
+ TMiddlewares,
612
+ TNewValidator,
613
+ TServerFnResponseType
614
+ >
615
+ }
616
+
617
+ export interface FunctionMiddlewareAfterValidator<
618
+ TMiddlewares,
619
+ TValidator,
620
+ TServerFnResponseType extends ServerFnResponseType,
621
+ > extends FunctionMiddlewareWithTypes<
622
+ TMiddlewares,
623
+ TValidator,
624
+ undefined,
625
+ undefined,
626
+ undefined,
627
+ undefined,
628
+ ServerFnResponseType
629
+ >,
630
+ FunctionMiddlewareServer<
631
+ TMiddlewares,
632
+ TValidator,
633
+ undefined,
634
+ undefined,
635
+ TServerFnResponseType
636
+ >,
637
+ FunctionMiddlewareClient<TMiddlewares, TValidator, ServerFnResponseType> {}
638
+
639
+ export interface RequestMiddleware
640
+ extends RequestMiddlewareAfterMiddleware<undefined> {
641
+ middleware: <const TMiddlewares = undefined>(
642
+ middlewares: Constrain<TMiddlewares, ReadonlyArray<AnyRequestMiddleware>>,
643
+ ) => RequestMiddlewareAfterMiddleware<TMiddlewares>
644
+ }
645
+
646
+ export type AnyRequestMiddleware = RequestMiddlewareWithTypes<any, any>
647
+
648
+ export interface RequestMiddlewareWithTypes<TMiddlewares, TServerContext> {
649
+ _types: RequestMiddlewareTypes<TMiddlewares, TServerContext>
650
+ }
651
+
652
+ export interface RequestMiddlewareTypes<TMiddlewares, TServerContext> {
653
+ type: 'request'
654
+ middlewares: TMiddlewares
655
+ serverContext: TServerContext
656
+ allServerContext: AssignAllServerContext<
657
+ TMiddlewares,
658
+ undefined,
659
+ TServerContext
660
+ >
661
+ }
662
+
663
+ export interface RequestMiddlewareAfterMiddleware<TMiddlewares>
664
+ extends RequestMiddlewareWithTypes<TMiddlewares, undefined>,
665
+ RequestMiddlewareServer<TMiddlewares> {}
666
+
667
+ export interface RequestMiddlewareServer<TMiddlewares> {
668
+ server: <TServerContext = undefined>(
669
+ fn: RequestServerFn<TMiddlewares, TServerContext>,
670
+ ) => RequestMiddlewareAfterServer<TMiddlewares, TServerContext>
671
+ }
672
+
673
+ export type RequestServerFn<TMiddlewares, TServerContext> = (
674
+ options: RequestServerOptions<TMiddlewares>,
675
+ ) => RequestMiddlewareServerFnResult<TMiddlewares, TServerContext>
676
+
677
+ export interface RequestServerOptions<TMiddlewares> {
678
+ request: Request
679
+ pathname: string
680
+ context: AssignAllServerContext<TMiddlewares>
681
+ next: RequestServerNextFn<TMiddlewares>
682
+ }
683
+
684
+ export type RequestServerNextFn<TMiddlewares> = <TServerContext = undefined>(
685
+ options?: RequestServerNextFnOptions<TServerContext>,
686
+ ) => RequestMiddlewareServerFnResult<TMiddlewares, TServerContext>
687
+
688
+ export interface RequestServerNextFnOptions<TServerContext> {
689
+ context?: TServerContext
690
+ }
691
+
692
+ export type RequestMiddlewareServerFnResult<TMiddlewares, TServerContext> =
693
+ | Promise<RequestServerResult<TMiddlewares, TServerContext>>
694
+ | RequestServerResult<TMiddlewares, TServerContext>
695
+
696
+ export interface RequestServerResult<TMiddlewares, TServerContext> {
697
+ request: Request
698
+ pathname: string
699
+ context: Expand<
700
+ AssignAllServerContext<TMiddlewares, undefined, TServerContext>
701
+ >
702
+ response: Response
703
+ }
704
+
705
+ export interface RequestMiddlewareAfterServer<TMiddlewares, TServerContext>
706
+ extends RequestMiddlewareWithTypes<TMiddlewares, TServerContext> {}