@tanstack/react-start-client 1.111.10

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 (129) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +33 -0
  3. package/dist/cjs/Meta.cjs +14 -0
  4. package/dist/cjs/Meta.cjs.map +1 -0
  5. package/dist/cjs/Meta.d.cts +1 -0
  6. package/dist/cjs/Scripts.cjs +12 -0
  7. package/dist/cjs/Scripts.cjs.map +1 -0
  8. package/dist/cjs/Scripts.d.cts +1 -0
  9. package/dist/cjs/StartClient.cjs +24 -0
  10. package/dist/cjs/StartClient.cjs.map +1 -0
  11. package/dist/cjs/StartClient.d.cts +4 -0
  12. package/dist/cjs/createIsomorphicFn.cjs +7 -0
  13. package/dist/cjs/createIsomorphicFn.cjs.map +1 -0
  14. package/dist/cjs/createIsomorphicFn.d.cts +12 -0
  15. package/dist/cjs/createMiddleware.cjs +34 -0
  16. package/dist/cjs/createMiddleware.cjs.map +1 -0
  17. package/dist/cjs/createMiddleware.d.cts +129 -0
  18. package/dist/cjs/createServerFn.cjs +369 -0
  19. package/dist/cjs/createServerFn.cjs.map +1 -0
  20. package/dist/cjs/createServerFn.d.cts +137 -0
  21. package/dist/cjs/envOnly.cjs +7 -0
  22. package/dist/cjs/envOnly.cjs.map +1 -0
  23. package/dist/cjs/envOnly.d.cts +4 -0
  24. package/dist/cjs/headers.cjs +30 -0
  25. package/dist/cjs/headers.cjs.map +1 -0
  26. package/dist/cjs/headers.d.cts +5 -0
  27. package/dist/cjs/index.cjs +31 -0
  28. package/dist/cjs/index.cjs.map +1 -0
  29. package/dist/cjs/index.d.cts +14 -0
  30. package/dist/cjs/json.cjs +14 -0
  31. package/dist/cjs/json.cjs.map +1 -0
  32. package/dist/cjs/json.d.cts +2 -0
  33. package/dist/cjs/registerGlobalMiddleware.cjs +9 -0
  34. package/dist/cjs/registerGlobalMiddleware.cjs.map +1 -0
  35. package/dist/cjs/registerGlobalMiddleware.d.cts +5 -0
  36. package/dist/cjs/renderRSC.cjs +29 -0
  37. package/dist/cjs/renderRSC.cjs.map +1 -0
  38. package/dist/cjs/renderRSC.d.cts +2 -0
  39. package/dist/cjs/routesManifest.d.cts +0 -0
  40. package/dist/cjs/serializer.cjs +152 -0
  41. package/dist/cjs/serializer.cjs.map +1 -0
  42. package/dist/cjs/serializer.d.cts +2 -0
  43. package/dist/cjs/ssr-client.cjs +114 -0
  44. package/dist/cjs/ssr-client.cjs.map +1 -0
  45. package/dist/cjs/ssr-client.d.cts +65 -0
  46. package/dist/cjs/tests/createIsomorphicFn.test-d.d.cts +1 -0
  47. package/dist/cjs/tests/createServerFn.test-d.d.cts +1 -0
  48. package/dist/cjs/tests/createServerMiddleware.test-d.d.cts +1 -0
  49. package/dist/cjs/tests/envOnly.test-d.d.cts +1 -0
  50. package/dist/cjs/tests/json.test.d.cts +1 -0
  51. package/dist/cjs/tests/transformer.test.d.cts +1 -0
  52. package/dist/cjs/useServerFn.cjs +26 -0
  53. package/dist/cjs/useServerFn.cjs.map +1 -0
  54. package/dist/cjs/useServerFn.d.cts +1 -0
  55. package/dist/esm/Meta.d.ts +1 -0
  56. package/dist/esm/Meta.js +14 -0
  57. package/dist/esm/Meta.js.map +1 -0
  58. package/dist/esm/Scripts.d.ts +1 -0
  59. package/dist/esm/Scripts.js +12 -0
  60. package/dist/esm/Scripts.js.map +1 -0
  61. package/dist/esm/StartClient.d.ts +4 -0
  62. package/dist/esm/StartClient.js +24 -0
  63. package/dist/esm/StartClient.js.map +1 -0
  64. package/dist/esm/createIsomorphicFn.d.ts +12 -0
  65. package/dist/esm/createIsomorphicFn.js +7 -0
  66. package/dist/esm/createIsomorphicFn.js.map +1 -0
  67. package/dist/esm/createMiddleware.d.ts +129 -0
  68. package/dist/esm/createMiddleware.js +34 -0
  69. package/dist/esm/createMiddleware.js.map +1 -0
  70. package/dist/esm/createServerFn.d.ts +137 -0
  71. package/dist/esm/createServerFn.js +347 -0
  72. package/dist/esm/createServerFn.js.map +1 -0
  73. package/dist/esm/envOnly.d.ts +4 -0
  74. package/dist/esm/envOnly.js +7 -0
  75. package/dist/esm/envOnly.js.map +1 -0
  76. package/dist/esm/headers.d.ts +5 -0
  77. package/dist/esm/headers.js +30 -0
  78. package/dist/esm/headers.js.map +1 -0
  79. package/dist/esm/index.d.ts +14 -0
  80. package/dist/esm/index.js +31 -0
  81. package/dist/esm/index.js.map +1 -0
  82. package/dist/esm/json.d.ts +2 -0
  83. package/dist/esm/json.js +14 -0
  84. package/dist/esm/json.js.map +1 -0
  85. package/dist/esm/registerGlobalMiddleware.d.ts +5 -0
  86. package/dist/esm/registerGlobalMiddleware.js +9 -0
  87. package/dist/esm/registerGlobalMiddleware.js.map +1 -0
  88. package/dist/esm/renderRSC.d.ts +2 -0
  89. package/dist/esm/renderRSC.js +29 -0
  90. package/dist/esm/renderRSC.js.map +1 -0
  91. package/dist/esm/routesManifest.d.ts +0 -0
  92. package/dist/esm/serializer.d.ts +2 -0
  93. package/dist/esm/serializer.js +152 -0
  94. package/dist/esm/serializer.js.map +1 -0
  95. package/dist/esm/ssr-client.d.ts +65 -0
  96. package/dist/esm/ssr-client.js +114 -0
  97. package/dist/esm/ssr-client.js.map +1 -0
  98. package/dist/esm/tests/createIsomorphicFn.test-d.d.ts +1 -0
  99. package/dist/esm/tests/createServerFn.test-d.d.ts +1 -0
  100. package/dist/esm/tests/createServerMiddleware.test-d.d.ts +1 -0
  101. package/dist/esm/tests/envOnly.test-d.d.ts +1 -0
  102. package/dist/esm/tests/json.test.d.ts +1 -0
  103. package/dist/esm/tests/transformer.test.d.ts +1 -0
  104. package/dist/esm/useServerFn.d.ts +1 -0
  105. package/dist/esm/useServerFn.js +26 -0
  106. package/dist/esm/useServerFn.js.map +1 -0
  107. package/package.json +68 -0
  108. package/src/Meta.tsx +10 -0
  109. package/src/Scripts.tsx +8 -0
  110. package/src/StartClient.tsx +21 -0
  111. package/src/createIsomorphicFn.ts +36 -0
  112. package/src/createMiddleware.ts +517 -0
  113. package/src/createServerFn.ts +790 -0
  114. package/src/envOnly.ts +9 -0
  115. package/src/headers.ts +50 -0
  116. package/src/index.tsx +74 -0
  117. package/src/json.ts +15 -0
  118. package/src/registerGlobalMiddleware.ts +9 -0
  119. package/src/renderRSC.tsx +91 -0
  120. package/src/routesManifest.ts +0 -0
  121. package/src/serializer.ts +177 -0
  122. package/src/ssr-client.tsx +221 -0
  123. package/src/tests/createIsomorphicFn.test-d.ts +72 -0
  124. package/src/tests/createServerFn.test-d.tsx +390 -0
  125. package/src/tests/createServerMiddleware.test-d.ts +611 -0
  126. package/src/tests/envOnly.test-d.ts +34 -0
  127. package/src/tests/json.test.ts +37 -0
  128. package/src/tests/transformer.test.tsx +147 -0
  129. package/src/useServerFn.ts +30 -0
@@ -0,0 +1,517 @@
1
+ import type {
2
+ ConstrainValidator,
3
+ Method,
4
+ ServerFnTypeOrTypeFn,
5
+ } from './createServerFn'
6
+ import type {
7
+ Assign,
8
+ Constrain,
9
+ Expand,
10
+ IntersectAssign,
11
+ ResolveValidatorInput,
12
+ ResolveValidatorOutput,
13
+ SerializerStringify,
14
+ } from '@tanstack/router-core'
15
+
16
+ export type AssignAllMiddleware<
17
+ TMiddlewares,
18
+ TType extends keyof AnyMiddleware['_types'],
19
+ TAcc = undefined,
20
+ > = TMiddlewares extends readonly [
21
+ infer TMiddleware extends AnyMiddleware,
22
+ ...infer TRest,
23
+ ]
24
+ ? AssignAllMiddleware<
25
+ TRest,
26
+ TType,
27
+ Assign<TAcc, TMiddleware['_types'][TType]>
28
+ >
29
+ : TAcc
30
+
31
+ /**
32
+ * Recursively resolve the client context type produced by a sequence of middleware
33
+ */
34
+ export type AssignAllClientContextBeforeNext<
35
+ TMiddlewares,
36
+ TClientContext = undefined,
37
+ > = unknown extends TClientContext
38
+ ? TClientContext
39
+ : Assign<
40
+ AssignAllMiddleware<TMiddlewares, 'allClientContextBeforeNext'>,
41
+ TClientContext
42
+ >
43
+
44
+ export type AssignAllClientSendContext<
45
+ TMiddlewares,
46
+ TSendContext = undefined,
47
+ > = unknown extends TSendContext
48
+ ? TSendContext
49
+ : Assign<
50
+ AssignAllMiddleware<TMiddlewares, 'allClientSendContext'>,
51
+ TSendContext
52
+ >
53
+
54
+ export type AssignAllClientContextAfterNext<
55
+ TMiddlewares,
56
+ TClientContext = undefined,
57
+ TSendContext = undefined,
58
+ > = unknown extends TClientContext
59
+ ? Assign<TClientContext, TSendContext>
60
+ : Assign<
61
+ AssignAllMiddleware<TMiddlewares, 'allClientContextAfterNext'>,
62
+ Assign<TClientContext, TSendContext>
63
+ >
64
+
65
+ /**
66
+ * Recursively resolve the server context type produced by a sequence of middleware
67
+ */
68
+ export type AssignAllServerContext<
69
+ TMiddlewares,
70
+ TSendContext = undefined,
71
+ TServerContext = undefined,
72
+ > = unknown extends TSendContext
73
+ ? Assign<TSendContext, TServerContext>
74
+ : Assign<
75
+ AssignAllMiddleware<TMiddlewares, 'allServerContext'>,
76
+ Assign<TSendContext, TServerContext>
77
+ >
78
+
79
+ export type AssignAllServerSendContext<
80
+ TMiddlewares,
81
+ TSendContext = undefined,
82
+ > = unknown extends TSendContext
83
+ ? TSendContext
84
+ : Assign<
85
+ AssignAllMiddleware<TMiddlewares, 'allServerSendContext'>,
86
+ TSendContext
87
+ >
88
+
89
+ export type IntersectAllMiddleware<
90
+ TMiddlewares,
91
+ TType extends keyof AnyMiddleware['_types'],
92
+ TAcc = undefined,
93
+ > = TMiddlewares extends readonly [
94
+ infer TMiddleware extends AnyMiddleware,
95
+ ...infer TRest,
96
+ ]
97
+ ? IntersectAllMiddleware<
98
+ TRest,
99
+ TType,
100
+ IntersectAssign<TAcc, TMiddleware['_types'][TType]>
101
+ >
102
+ : TAcc
103
+
104
+ /**
105
+ * Recursively resolve the input type produced by a sequence of middleware
106
+ */
107
+ export type IntersectAllValidatorInputs<TMiddlewares, TValidator> =
108
+ unknown extends TValidator
109
+ ? TValidator
110
+ : IntersectAssign<
111
+ IntersectAllMiddleware<TMiddlewares, 'allInput'>,
112
+ TValidator extends undefined
113
+ ? undefined
114
+ : ResolveValidatorInput<TValidator>
115
+ >
116
+ /**
117
+ * Recursively merge the output type produced by a sequence of middleware
118
+ */
119
+ export type IntersectAllValidatorOutputs<TMiddlewares, TValidator> =
120
+ unknown extends TValidator
121
+ ? TValidator
122
+ : IntersectAssign<
123
+ IntersectAllMiddleware<TMiddlewares, 'allOutput'>,
124
+ TValidator extends undefined
125
+ ? undefined
126
+ : ResolveValidatorOutput<TValidator>
127
+ >
128
+
129
+ export interface MiddlewareOptions<
130
+ in out TMiddlewares,
131
+ in out TValidator,
132
+ in out TServerContext,
133
+ in out TClientContext,
134
+ > {
135
+ validateClient?: boolean
136
+ middleware?: TMiddlewares
137
+ validator?: ConstrainValidator<TValidator>
138
+ client?: MiddlewareClientFn<
139
+ TMiddlewares,
140
+ TValidator,
141
+ TServerContext,
142
+ TClientContext
143
+ >
144
+ server?: MiddlewareServerFn<
145
+ TMiddlewares,
146
+ TValidator,
147
+ TServerContext,
148
+ unknown,
149
+ unknown
150
+ >
151
+ }
152
+
153
+ export type MiddlewareServerNextFn<TMiddlewares, TServerSendContext> = <
154
+ TNewServerContext = undefined,
155
+ TSendContext = undefined,
156
+ >(ctx?: {
157
+ context?: TNewServerContext
158
+ sendContext?: SerializerStringify<TSendContext>
159
+ }) => Promise<
160
+ ServerResultWithContext<
161
+ TMiddlewares,
162
+ TServerSendContext,
163
+ TNewServerContext,
164
+ TSendContext
165
+ >
166
+ >
167
+
168
+ export interface MiddlewareServerFnOptions<
169
+ in out TMiddlewares,
170
+ in out TValidator,
171
+ in out TServerSendContext,
172
+ > {
173
+ data: Expand<IntersectAllValidatorOutputs<TMiddlewares, TValidator>>
174
+ context: Expand<AssignAllServerContext<TMiddlewares, TServerSendContext>>
175
+ next: MiddlewareServerNextFn<TMiddlewares, TServerSendContext>
176
+ method: Method
177
+ filename: string
178
+ functionId: string
179
+ signal: AbortSignal
180
+ }
181
+
182
+ export type MiddlewareServerFn<
183
+ TMiddlewares,
184
+ TValidator,
185
+ TServerSendContext,
186
+ TNewServerContext,
187
+ TSendContext,
188
+ > = (
189
+ options: MiddlewareServerFnOptions<
190
+ TMiddlewares,
191
+ TValidator,
192
+ TServerSendContext
193
+ >,
194
+ ) => MiddlewareServerFnResult<
195
+ TMiddlewares,
196
+ TServerSendContext,
197
+ TNewServerContext,
198
+ TSendContext
199
+ >
200
+
201
+ export type MiddlewareServerFnResult<
202
+ TMiddlewares,
203
+ TServerSendContext,
204
+ TServerContext,
205
+ TSendContext,
206
+ > =
207
+ | Promise<
208
+ ServerResultWithContext<
209
+ TMiddlewares,
210
+ TServerSendContext,
211
+ TServerContext,
212
+ TSendContext
213
+ >
214
+ >
215
+ | ServerResultWithContext<
216
+ TMiddlewares,
217
+ TServerSendContext,
218
+ TServerContext,
219
+ TSendContext
220
+ >
221
+
222
+ export type MiddlewareClientNextFn<TMiddlewares> = <
223
+ TSendContext = undefined,
224
+ TNewClientContext = undefined,
225
+ >(ctx?: {
226
+ context?: TNewClientContext
227
+ sendContext?: SerializerStringify<TSendContext>
228
+ headers?: HeadersInit
229
+ }) => Promise<
230
+ ClientResultWithContext<TMiddlewares, TSendContext, TNewClientContext>
231
+ >
232
+
233
+ export interface MiddlewareClientFnOptions<
234
+ in out TMiddlewares,
235
+ in out TValidator,
236
+ > {
237
+ data: Expand<IntersectAllValidatorInputs<TMiddlewares, TValidator>>
238
+ context: Expand<AssignAllClientContextBeforeNext<TMiddlewares>>
239
+ sendContext: Expand<AssignAllServerSendContext<TMiddlewares>>
240
+ method: Method
241
+ signal: AbortSignal
242
+ next: MiddlewareClientNextFn<TMiddlewares>
243
+ filename: string
244
+ functionId: string
245
+ type: ServerFnTypeOrTypeFn<Method, TMiddlewares, TValidator>
246
+ }
247
+
248
+ export type MiddlewareClientFn<
249
+ TMiddlewares,
250
+ TValidator,
251
+ TSendContext,
252
+ TClientContext,
253
+ > = (
254
+ options: MiddlewareClientFnOptions<TMiddlewares, TValidator>,
255
+ ) => MiddlewareClientFnResult<TMiddlewares, TSendContext, TClientContext>
256
+
257
+ export type MiddlewareClientFnResult<
258
+ TMiddlewares,
259
+ TSendContext,
260
+ TClientContext,
261
+ > =
262
+ | Promise<ClientResultWithContext<TMiddlewares, TSendContext, TClientContext>>
263
+ | ClientResultWithContext<TMiddlewares, TSendContext, TClientContext>
264
+
265
+ export type ServerResultWithContext<
266
+ in out TMiddlewares,
267
+ in out TServerSendContext,
268
+ in out TServerContext,
269
+ in out TSendContext,
270
+ > = {
271
+ 'use functions must return the result of next()': true
272
+ _types: {
273
+ context: TServerContext
274
+ sendContext: TSendContext
275
+ }
276
+ context: Expand<
277
+ AssignAllServerContext<TMiddlewares, TServerSendContext, TServerContext>
278
+ >
279
+ sendContext: Expand<AssignAllClientSendContext<TMiddlewares, TSendContext>>
280
+ }
281
+
282
+ export type ClientResultWithContext<
283
+ in out TMiddlewares,
284
+ in out TSendContext,
285
+ in out TClientContext,
286
+ > = {
287
+ 'use functions must return the result of next()': true
288
+ context: Expand<AssignAllClientContextAfterNext<TMiddlewares, TClientContext>>
289
+ sendContext: Expand<AssignAllServerSendContext<TMiddlewares, TSendContext>>
290
+ headers: HeadersInit
291
+ }
292
+
293
+ export type AnyMiddleware = MiddlewareWithTypes<any, any, any, any, any, any>
294
+
295
+ export interface MiddlewareTypes<
296
+ in out TMiddlewares,
297
+ in out TValidator,
298
+ in out TServerContext,
299
+ in out TServerSendContext,
300
+ in out TClientContext,
301
+ in out TClientSendContext,
302
+ > {
303
+ middlewares: TMiddlewares
304
+ input: ResolveValidatorInput<TValidator>
305
+ allInput: IntersectAllValidatorInputs<TMiddlewares, TValidator>
306
+ output: ResolveValidatorOutput<TValidator>
307
+ allOutput: IntersectAllValidatorOutputs<TMiddlewares, TValidator>
308
+ clientContext: TClientContext
309
+ allClientContextBeforeNext: AssignAllClientContextBeforeNext<
310
+ TMiddlewares,
311
+ TClientContext
312
+ >
313
+ allClientContextAfterNext: AssignAllClientContextAfterNext<
314
+ TMiddlewares,
315
+ TClientContext,
316
+ TClientSendContext
317
+ >
318
+ serverContext: TServerContext
319
+ serverSendContext: TServerSendContext
320
+ allServerSendContext: AssignAllServerSendContext<
321
+ TMiddlewares,
322
+ TServerSendContext
323
+ >
324
+ allServerContext: AssignAllServerContext<
325
+ TMiddlewares,
326
+ TServerSendContext,
327
+ TServerContext
328
+ >
329
+ clientSendContext: TClientSendContext
330
+ allClientSendContext: AssignAllClientSendContext<
331
+ TMiddlewares,
332
+ TClientSendContext
333
+ >
334
+ validator: TValidator
335
+ }
336
+
337
+ export interface MiddlewareWithTypes<
338
+ TMiddlewares,
339
+ TValidator,
340
+ TServerContext,
341
+ TServerSendContext,
342
+ TClientContext,
343
+ TClientSendContext,
344
+ > {
345
+ _types: MiddlewareTypes<
346
+ TMiddlewares,
347
+ TValidator,
348
+ TServerContext,
349
+ TServerSendContext,
350
+ TClientContext,
351
+ TClientSendContext
352
+ >
353
+ options: MiddlewareOptions<
354
+ TMiddlewares,
355
+ TValidator,
356
+ TServerContext,
357
+ TClientContext
358
+ >
359
+ }
360
+
361
+ export interface MiddlewareAfterValidator<TMiddlewares, TValidator>
362
+ extends MiddlewareWithTypes<
363
+ TMiddlewares,
364
+ TValidator,
365
+ undefined,
366
+ undefined,
367
+ undefined,
368
+ undefined
369
+ >,
370
+ MiddlewareServer<TMiddlewares, TValidator, undefined, undefined>,
371
+ MiddlewareClient<TMiddlewares, TValidator> {}
372
+
373
+ export interface MiddlewareValidator<TMiddlewares> {
374
+ validator: <TNewValidator>(
375
+ input: ConstrainValidator<TNewValidator>,
376
+ ) => MiddlewareAfterValidator<TMiddlewares, TNewValidator>
377
+ }
378
+
379
+ export interface MiddlewareAfterServer<
380
+ TMiddlewares,
381
+ TValidator,
382
+ TServerContext,
383
+ TServerSendContext,
384
+ TClientContext,
385
+ TClientSendContext,
386
+ > extends MiddlewareWithTypes<
387
+ TMiddlewares,
388
+ TValidator,
389
+ TServerContext,
390
+ TServerSendContext,
391
+ TClientContext,
392
+ TClientSendContext
393
+ > {}
394
+
395
+ export interface MiddlewareServer<
396
+ TMiddlewares,
397
+ TValidator,
398
+ TServerSendContext,
399
+ TClientContext,
400
+ > {
401
+ server: <TNewServerContext = undefined, TSendContext = undefined>(
402
+ server: MiddlewareServerFn<
403
+ TMiddlewares,
404
+ TValidator,
405
+ TServerSendContext,
406
+ TNewServerContext,
407
+ TSendContext
408
+ >,
409
+ ) => MiddlewareAfterServer<
410
+ TMiddlewares,
411
+ TValidator,
412
+ TNewServerContext,
413
+ TServerSendContext,
414
+ TClientContext,
415
+ TSendContext
416
+ >
417
+ }
418
+
419
+ export interface MiddlewareAfterClient<
420
+ TMiddlewares,
421
+ TValidator,
422
+ TServerSendContext,
423
+ TClientContext,
424
+ > extends MiddlewareWithTypes<
425
+ TMiddlewares,
426
+ TValidator,
427
+ undefined,
428
+ TServerSendContext,
429
+ TClientContext,
430
+ undefined
431
+ >,
432
+ MiddlewareServer<
433
+ TMiddlewares,
434
+ TValidator,
435
+ TServerSendContext,
436
+ TClientContext
437
+ > {}
438
+
439
+ export interface MiddlewareClient<TMiddlewares, TValidator> {
440
+ client: <TSendServerContext = undefined, TNewClientContext = undefined>(
441
+ client: MiddlewareClientFn<
442
+ TMiddlewares,
443
+ TValidator,
444
+ TSendServerContext,
445
+ TNewClientContext
446
+ >,
447
+ ) => MiddlewareAfterClient<
448
+ TMiddlewares,
449
+ TValidator,
450
+ TSendServerContext,
451
+ TNewClientContext
452
+ >
453
+ }
454
+
455
+ export interface MiddlewareAfterMiddleware<TMiddlewares>
456
+ extends MiddlewareWithTypes<
457
+ TMiddlewares,
458
+ undefined,
459
+ undefined,
460
+ undefined,
461
+ undefined,
462
+ undefined
463
+ >,
464
+ MiddlewareServer<TMiddlewares, undefined, undefined, undefined>,
465
+ MiddlewareClient<TMiddlewares, undefined>,
466
+ MiddlewareValidator<TMiddlewares> {}
467
+
468
+ export interface Middleware extends MiddlewareAfterMiddleware<unknown> {
469
+ middleware: <const TNewMiddlewares = undefined>(
470
+ middlewares: Constrain<TNewMiddlewares, ReadonlyArray<AnyMiddleware>>,
471
+ ) => MiddlewareAfterMiddleware<TNewMiddlewares>
472
+ }
473
+
474
+ export function createMiddleware(
475
+ options?: {
476
+ validateClient?: boolean
477
+ },
478
+ __opts?: MiddlewareOptions<unknown, undefined, undefined, undefined>,
479
+ ): Middleware {
480
+ // const resolvedOptions = (__opts || options) as MiddlewareOptions<
481
+ const resolvedOptions =
482
+ __opts ||
483
+ ((options || {}) as MiddlewareOptions<
484
+ unknown,
485
+ undefined,
486
+ undefined,
487
+ undefined
488
+ >)
489
+
490
+ return {
491
+ options: resolvedOptions as any,
492
+ middleware: (middleware: any) => {
493
+ return createMiddleware(
494
+ undefined,
495
+ Object.assign(resolvedOptions, { middleware }),
496
+ ) as any
497
+ },
498
+ validator: (validator: any) => {
499
+ return createMiddleware(
500
+ undefined,
501
+ Object.assign(resolvedOptions, { validator }),
502
+ ) as any
503
+ },
504
+ client: (client: any) => {
505
+ return createMiddleware(
506
+ undefined,
507
+ Object.assign(resolvedOptions, { client }),
508
+ ) as any
509
+ },
510
+ server: (server: any) => {
511
+ return createMiddleware(
512
+ undefined,
513
+ Object.assign(resolvedOptions, { server }),
514
+ ) as any
515
+ },
516
+ } as unknown as Middleware
517
+ }