@tanstack/start-client-core 1.120.4-alpha.19 → 1.120.5

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 +27 -6
  2. package/dist/cjs/createMiddleware.cjs +5 -8
  3. package/dist/cjs/createMiddleware.cjs.map +1 -1
  4. package/dist/cjs/createMiddleware.d.cts +81 -125
  5. package/dist/cjs/createServerFn.cjs +0 -1
  6. package/dist/cjs/createServerFn.cjs.map +1 -1
  7. package/dist/cjs/createServerFn.d.cts +5 -6
  8. package/dist/cjs/index.cjs +0 -1
  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 +25 -24
  14. package/dist/cjs/ssr-client.cjs.map +1 -1
  15. package/dist/cjs/ssr-client.d.cts +1 -2
  16. package/dist/esm/createMiddleware.d.ts +81 -125
  17. package/dist/esm/createMiddleware.js +5 -8
  18. package/dist/esm/createMiddleware.js.map +1 -1
  19. package/dist/esm/createServerFn.d.ts +5 -6
  20. package/dist/esm/createServerFn.js +0 -1
  21. package/dist/esm/createServerFn.js.map +1 -1
  22. package/dist/esm/index.d.ts +2 -2
  23. package/dist/esm/index.js +1 -2
  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 +1 -2
  27. package/dist/esm/ssr-client.js +25 -24
  28. package/dist/esm/ssr-client.js.map +1 -1
  29. package/package.json +2 -2
  30. package/src/createMiddleware.ts +368 -479
  31. package/src/createServerFn.ts +16 -31
  32. package/src/index.tsx +21 -22
  33. package/src/registerGlobalMiddleware.ts +3 -3
  34. package/src/ssr-client.tsx +29 -33
  35. package/src/tests/createServerFn.test-d.ts +13 -20
  36. package/src/tests/createServerMiddleware.test-d.ts +73 -186
@@ -14,225 +14,21 @@ import type {
14
14
  SerializerStringify,
15
15
  } from '@tanstack/router-core'
16
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<
17
+ export type AssignAllMiddleware<
195
18
  TMiddlewares,
196
- TType extends
197
- | keyof AnyFunctionMiddleware['_types']
198
- | keyof AnyRequestMiddleware['_types'],
19
+ TType extends keyof AnyMiddleware['_types'],
199
20
  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
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
+ >
211
30
  : TAcc
212
31
 
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
32
  /**
237
33
  * Recursively resolve the client context type produced by a sequence of middleware
238
34
  */
@@ -246,21 +42,15 @@ export type AssignAllClientContextBeforeNext<
246
42
  TClientContext
247
43
  >
248
44
 
249
- export type AssignAllMiddleware<
45
+ export type AssignAllClientSendContext<
250
46
  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
47
+ TSendContext = undefined,
48
+ > = unknown extends TSendContext
49
+ ? TSendContext
50
+ : Assign<
51
+ AssignAllMiddleware<TMiddlewares, 'allClientSendContext'>,
52
+ TSendContext
53
+ >
264
54
 
265
55
  export type AssignAllClientContextAfterNext<
266
56
  TMiddlewares,
@@ -273,16 +63,6 @@ export type AssignAllClientContextAfterNext<
273
63
  Assign<TClientContext, TSendContext>
274
64
  >
275
65
 
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
66
  /**
287
67
  * Recursively resolve the server context type produced by a sequence of middleware
288
68
  */
@@ -297,17 +77,57 @@ export type AssignAllServerContext<
297
77
  Assign<TSendContext, TServerContext>
298
78
  >
299
79
 
300
- export type AssignAllClientSendContext<
80
+ export type AssignAllServerSendContext<
301
81
  TMiddlewares,
302
82
  TSendContext = undefined,
303
83
  > = unknown extends TSendContext
304
84
  ? TSendContext
305
85
  : Assign<
306
- AssignAllMiddleware<TMiddlewares, 'allClientSendContext'>,
86
+ AssignAllMiddleware<TMiddlewares, 'allServerSendContext'>,
307
87
  TSendContext
308
88
  >
309
89
 
310
- export interface FunctionMiddlewareOptions<
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<
311
131
  in out TMiddlewares,
312
132
  in out TValidator,
313
133
  in out TServerContext,
@@ -317,14 +137,14 @@ export interface FunctionMiddlewareOptions<
317
137
  validateClient?: boolean
318
138
  middleware?: TMiddlewares
319
139
  validator?: ConstrainValidator<TValidator>
320
- client?: FunctionMiddlewareClientFn<
140
+ client?: MiddlewareClientFn<
321
141
  TMiddlewares,
322
142
  TValidator,
323
143
  TServerContext,
324
144
  TClientContext,
325
145
  TServerFnResponseType
326
146
  >
327
- server?: FunctionMiddlewareServerFn<
147
+ server?: MiddlewareServerFn<
328
148
  TMiddlewares,
329
149
  TValidator,
330
150
  TServerContext,
@@ -334,44 +154,38 @@ export interface FunctionMiddlewareOptions<
334
154
  >
335
155
  }
336
156
 
337
- export type FunctionMiddlewareClientNextFn<TMiddlewares> = <
157
+ export type MiddlewareServerNextFn<TMiddlewares, TServerSendContext> = <
158
+ TNewServerContext = undefined,
338
159
  TSendContext = undefined,
339
- TNewClientContext = undefined,
340
160
  >(ctx?: {
341
- context?: TNewClientContext
161
+ context?: TNewServerContext
342
162
  sendContext?: SerializerStringify<TSendContext>
343
- headers?: HeadersInit
344
163
  }) => 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<
164
+ ServerResultWithContext<
365
165
  TMiddlewares,
366
- TValidator,
367
- TNewServerContext,
368
166
  TServerSendContext,
369
- TClientContext,
370
- TSendContext,
371
- ServerFnResponseType
167
+ TNewServerContext,
168
+ TSendContext
372
169
  >
170
+ >
171
+
172
+ export interface MiddlewareServerFnOptions<
173
+ in out TMiddlewares,
174
+ in out TValidator,
175
+ in out TServerSendContext,
176
+ in out TServerFnResponseType,
177
+ > {
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
373
186
  }
374
- export type FunctionMiddlewareServerFn<
187
+
188
+ export type MiddlewareServerFn<
375
189
  TMiddlewares,
376
190
  TValidator,
377
191
  TServerSendContext,
@@ -379,47 +193,96 @@ export type FunctionMiddlewareServerFn<
379
193
  TSendContext,
380
194
  TServerFnResponseType extends ServerFnResponseType,
381
195
  > = (
382
- options: FunctionMiddlewareServerFnOptions<
196
+ options: MiddlewareServerFnOptions<
383
197
  TMiddlewares,
384
198
  TValidator,
385
199
  TServerSendContext,
386
200
  TServerFnResponseType
387
201
  >,
388
- ) => FunctionMiddlewareServerFnResult<
202
+ ) => MiddlewareServerFnResult<
389
203
  TMiddlewares,
390
204
  TServerSendContext,
391
205
  TNewServerContext,
392
206
  TSendContext
393
207
  >
394
208
 
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<
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<
242
+ in out TMiddlewares,
243
+ in out TValidator,
244
+ in out TServerFnResponseType extends ServerFnResponseType,
245
+ > {
246
+ data: Expand<IntersectAllValidatorInputs<TMiddlewares, TValidator>>
247
+ context: Expand<AssignAllClientContextBeforeNext<TMiddlewares>>
248
+ sendContext: Expand<AssignAllServerSendContext<TMiddlewares>>
249
+ method: Method
250
+ response: TServerFnResponseType
251
+ signal: AbortSignal
252
+ next: MiddlewareClientNextFn<TMiddlewares>
253
+ filename: string
254
+ functionId: string
255
+ type: ServerFnTypeOrTypeFn<
256
+ Method,
257
+ TServerFnResponseType,
415
258
  TMiddlewares,
416
- TServerSendContext,
417
- TNewServerContext,
418
- TSendContext
259
+ TValidator
419
260
  >
420
- >
261
+ }
421
262
 
422
- export type FunctionServerResultWithContext<
263
+ export type MiddlewareClientFn<
264
+ TMiddlewares,
265
+ TValidator,
266
+ TSendContext,
267
+ TClientContext,
268
+ TServerFnResponseType extends ServerFnResponseType,
269
+ > = (
270
+ options: MiddlewareClientFnOptions<
271
+ 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>
284
+
285
+ export type ServerResultWithContext<
423
286
  in out TMiddlewares,
424
287
  in out TServerSendContext,
425
288
  in out TServerContext,
@@ -436,44 +299,70 @@ export type FunctionServerResultWithContext<
436
299
  sendContext: Expand<AssignAllClientSendContext<TMiddlewares, TSendContext>>
437
300
  }
438
301
 
439
- export interface FunctionMiddlewareServerFnOptions<
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<
440
324
  in out TMiddlewares,
441
325
  in out TValidator,
326
+ in out TServerContext,
442
327
  in out TServerSendContext,
443
- in out TServerFnResponseType,
328
+ in out TClientContext,
329
+ in out TClientSendContext,
444
330
  > {
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
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
453
363
  }
454
364
 
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<
365
+ export interface MiddlewareWithTypes<
477
366
  TMiddlewares,
478
367
  TValidator,
479
368
  TServerContext,
@@ -481,110 +370,111 @@ export interface FunctionMiddlewareAfterServer<
481
370
  TClientContext,
482
371
  TClientSendContext,
483
372
  TServerFnResponseType extends ServerFnResponseType,
484
- > extends FunctionMiddlewareWithTypes<
373
+ > {
374
+ _types: MiddlewareTypes<
485
375
  TMiddlewares,
486
376
  TValidator,
487
377
  TServerContext,
488
378
  TServerSendContext,
489
379
  TClientContext,
490
- TClientSendContext,
380
+ TClientSendContext
381
+ >
382
+ options: MiddlewareOptions<
383
+ TMiddlewares,
384
+ TValidator,
385
+ TServerContext,
386
+ TClientContext,
491
387
  TServerFnResponseType
492
- > {}
388
+ >
389
+ }
493
390
 
494
- export interface FunctionMiddlewareClient<
391
+ export interface MiddlewareAfterValidator<
495
392
  TMiddlewares,
496
393
  TValidator,
497
394
  TServerFnResponseType extends ServerFnResponseType,
498
- > {
499
- client: <TSendServerContext = undefined, TNewClientContext = undefined>(
500
- client: FunctionMiddlewareClientFn<
395
+ > extends MiddlewareWithTypes<
501
396
  TMiddlewares,
502
397
  TValidator,
503
- TSendServerContext,
504
- TNewClientContext,
398
+ undefined,
399
+ undefined,
400
+ undefined,
401
+ undefined,
402
+ ServerFnResponseType
403
+ >,
404
+ MiddlewareServer<
405
+ TMiddlewares,
406
+ TValidator,
407
+ undefined,
408
+ undefined,
505
409
  TServerFnResponseType
506
410
  >,
507
- ) => FunctionMiddlewareAfterClient<
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<
508
420
  TMiddlewares,
509
- TValidator,
510
- TSendServerContext,
511
- TNewClientContext,
512
- ServerFnResponseType
421
+ TNewValidator,
422
+ TServerFnResponseType
513
423
  >
514
424
  }
515
425
 
516
- export type FunctionMiddlewareClientFn<
426
+ export interface MiddlewareAfterServer<
517
427
  TMiddlewares,
518
428
  TValidator,
519
- TSendContext,
429
+ TServerContext,
430
+ TServerSendContext,
520
431
  TClientContext,
432
+ TClientSendContext,
521
433
  TServerFnResponseType extends ServerFnResponseType,
522
- > = (
523
- options: FunctionMiddlewareClientFnOptions<
434
+ > extends MiddlewareWithTypes<
524
435
  TMiddlewares,
525
436
  TValidator,
437
+ TServerContext,
438
+ TServerSendContext,
439
+ TClientContext,
440
+ TClientSendContext,
526
441
  TServerFnResponseType
527
- >,
528
- ) => FunctionMiddlewareClientFnResult<
529
- TMiddlewares,
530
- TSendContext,
531
- TClientContext
532
- >
442
+ > {}
533
443
 
534
- export interface FunctionMiddlewareClientFnOptions<
535
- in out TMiddlewares,
536
- in out TValidator,
537
- in out TServerFnResponseType extends ServerFnResponseType,
444
+ export interface MiddlewareServer<
445
+ TMiddlewares,
446
+ TValidator,
447
+ TServerSendContext,
448
+ TClientContext,
449
+ TServerFnResponseType extends ServerFnResponseType,
538
450
  > {
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,
451
+ server: <TNewServerContext = undefined, TSendContext = undefined>(
452
+ server: MiddlewareServerFn<
453
+ TMiddlewares,
454
+ TValidator,
455
+ TServerSendContext,
456
+ TNewServerContext,
457
+ TSendContext,
458
+ TServerFnResponseType
459
+ >,
460
+ ) => MiddlewareAfterServer<
551
461
  TMiddlewares,
552
- TValidator
462
+ TValidator,
463
+ TNewServerContext,
464
+ TServerSendContext,
465
+ TClientContext,
466
+ TSendContext,
467
+ ServerFnResponseType
553
468
  >
554
469
  }
555
470
 
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<
471
+ export interface MiddlewareAfterClient<
582
472
  TMiddlewares,
583
473
  TValidator,
584
474
  TServerSendContext,
585
475
  TClientContext,
586
476
  TServerFnResponseType extends ServerFnResponseType,
587
- > extends FunctionMiddlewareWithTypes<
477
+ > extends MiddlewareWithTypes<
588
478
  TMiddlewares,
589
479
  TValidator,
590
480
  undefined,
@@ -593,7 +483,7 @@ export interface FunctionMiddlewareAfterClient<
593
483
  undefined,
594
484
  TServerFnResponseType
595
485
  >,
596
- FunctionMiddlewareServer<
486
+ MiddlewareServer<
597
487
  TMiddlewares,
598
488
  TValidator,
599
489
  TServerSendContext,
@@ -601,106 +491,105 @@ export interface FunctionMiddlewareAfterClient<
601
491
  TServerFnResponseType
602
492
  > {}
603
493
 
604
- export interface FunctionMiddlewareValidator<
494
+ export interface MiddlewareClient<
605
495
  TMiddlewares,
496
+ TValidator,
606
497
  TServerFnResponseType extends ServerFnResponseType,
607
498
  > {
608
- validator: <TNewValidator>(
609
- input: ConstrainValidator<TNewValidator>,
610
- ) => FunctionMiddlewareAfterValidator<
499
+ client: <TSendServerContext = undefined, TNewClientContext = undefined>(
500
+ client: MiddlewareClientFn<
501
+ TMiddlewares,
502
+ TValidator,
503
+ TSendServerContext,
504
+ TNewClientContext,
505
+ TServerFnResponseType
506
+ >,
507
+ ) => MiddlewareAfterClient<
611
508
  TMiddlewares,
612
- TNewValidator,
613
- TServerFnResponseType
509
+ TValidator,
510
+ TSendServerContext,
511
+ TNewClientContext,
512
+ ServerFnResponseType
614
513
  >
615
514
  }
616
515
 
617
- export interface FunctionMiddlewareAfterValidator<
516
+ export interface MiddlewareAfterMiddleware<
618
517
  TMiddlewares,
619
- TValidator,
620
518
  TServerFnResponseType extends ServerFnResponseType,
621
- > extends FunctionMiddlewareWithTypes<
519
+ > extends MiddlewareWithTypes<
622
520
  TMiddlewares,
623
- TValidator,
624
521
  undefined,
625
522
  undefined,
626
523
  undefined,
627
524
  undefined,
628
- ServerFnResponseType
525
+ undefined,
526
+ TServerFnResponseType
629
527
  >,
630
- FunctionMiddlewareServer<
528
+ MiddlewareServer<
631
529
  TMiddlewares,
632
- TValidator,
530
+ undefined,
633
531
  undefined,
634
532
  undefined,
635
533
  TServerFnResponseType
636
534
  >,
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
- }
535
+ MiddlewareClient<TMiddlewares, undefined, TServerFnResponseType>,
536
+ MiddlewareValidator<TMiddlewares, TServerFnResponseType> {}
645
537
 
646
- export type AnyRequestMiddleware = RequestMiddlewareWithTypes<any, any>
647
-
648
- export interface RequestMiddlewareWithTypes<TMiddlewares, TServerContext> {
649
- _types: RequestMiddlewareTypes<TMiddlewares, TServerContext>
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>
650
543
  }
651
544
 
652
- export interface RequestMiddlewareTypes<TMiddlewares, TServerContext> {
653
- type: 'request'
654
- middlewares: TMiddlewares
655
- serverContext: TServerContext
656
- allServerContext: AssignAllServerContext<
657
- TMiddlewares,
545
+ export function createMiddleware(
546
+ options?: {
547
+ validateClient?: boolean
548
+ },
549
+ __opts?: MiddlewareOptions<
550
+ unknown,
658
551
  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>
552
+ undefined,
553
+ 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
+ >)
695
567
 
696
- export interface RequestServerResult<TMiddlewares, TServerContext> {
697
- request: Request
698
- pathname: string
699
- context: Expand<
700
- AssignAllServerContext<TMiddlewares, undefined, TServerContext>
701
- >
702
- response: Response
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>
703
595
  }
704
-
705
- export interface RequestMiddlewareAfterServer<TMiddlewares, TServerContext>
706
- extends RequestMiddlewareWithTypes<TMiddlewares, TServerContext> {}