@tanstack/start-client-core 1.120.7 → 1.121.0-alpha.11

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