Skip to content

Commit c0d048a

Browse files
committed
i sure hope an abstraction doesn't break things again
1 parent b94486c commit c0d048a

File tree

1 file changed

+36
-49
lines changed

1 file changed

+36
-49
lines changed

packages/router-core/src/ssr/serializer/transformer.ts

Lines changed: 36 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export interface CreateSerializationAdapterOptions<TInput, TOutput> {
3232

3333
export type ValidateSerializable<T, TSerializable> =
3434
T extends ReadonlyArray<unknown>
35-
? ValidateSerializableArray<T, TSerializable>
35+
? ResolveArrayShape<T, TSerializable, 'input'>
3636
: T extends TSerializable
3737
? T
3838
: T extends (...args: Array<any>) => any
@@ -45,9 +45,7 @@ export type ValidateSerializable<T, TSerializable> =
4545
? ValidateSerializableSet<T, TSerializable>
4646
: T extends Map<any, any>
4747
? ValidateSerializableMap<T, TSerializable>
48-
: {
49-
[K in keyof T]: ValidateSerializable<T[K], TSerializable>
50-
}
48+
: { [K in keyof T]: ValidateSerializable<T[K], TSerializable> }
5149

5250
export type ValidateSerializablePromise<T, TSerializable> =
5351
T extends Promise<infer TAwaited>
@@ -72,28 +70,6 @@ export type ValidateSerializableMap<T, TSerializable> =
7270
>
7371
: never
7472

75-
type ValidateSerializableArray<
76-
T extends ReadonlyArray<unknown>,
77-
TSerializable,
78-
> = number extends T['length']
79-
? T extends Array<infer U>
80-
? Array<ValidateSerializable<U, TSerializable>>
81-
: ReadonlyArray<ValidateSerializable<T[number], TSerializable>>
82-
: ValidateSerializableTuple<T, TSerializable>
83-
84-
type ValidateSerializableTuple<
85-
T extends ReadonlyArray<unknown>,
86-
TSerializable,
87-
> = T extends readonly [infer THead, ...infer TTail]
88-
? readonly [
89-
ValidateSerializable<THead, TSerializable>,
90-
...ValidateSerializableTuple<
91-
TTail extends ReadonlyArray<unknown> ? TTail : [],
92-
TSerializable
93-
>,
94-
]
95-
: T
96-
9773
export type RegisteredReadableStream =
9874
unknown extends SerializerExtensions['ReadableStream']
9975
? never
@@ -199,7 +175,7 @@ export type ValidateSerializableInputResult<TRegister, T> =
199175

200176
export type ValidateSerializableResult<T, TSerializable> =
201177
T extends ReadonlyArray<unknown>
202-
? ValidateSerializableResultArray<T, TSerializable>
178+
? ResolveArrayShape<T, TSerializable, 'result'>
203179
: T extends TSerializable
204180
? T
205181
: unknown extends SerializerExtensions['ReadableStream']
@@ -208,28 +184,6 @@ export type ValidateSerializableResult<T, TSerializable> =
208184
? ReadableStream
209185
: { [K in keyof T]: ValidateSerializableResult<T[K], TSerializable> }
210186

211-
type ValidateSerializableResultArray<
212-
T extends ReadonlyArray<unknown>,
213-
TSerializable,
214-
> = number extends T['length']
215-
? T extends Array<infer U>
216-
? Array<ValidateSerializableResult<U, TSerializable>>
217-
: ReadonlyArray<ValidateSerializableResult<T[number], TSerializable>>
218-
: ValidateSerializableResultTuple<T, TSerializable>
219-
220-
type ValidateSerializableResultTuple<
221-
T extends ReadonlyArray<unknown>,
222-
TSerializable,
223-
> = T extends readonly [infer THead, ...infer TTail]
224-
? readonly [
225-
ValidateSerializableResult<THead, TSerializable>,
226-
...ValidateSerializableResultTuple<
227-
TTail extends ReadonlyArray<unknown> ? TTail : [],
228-
TSerializable
229-
>,
230-
]
231-
: T
232-
233187
export type RegisteredSSROption<TRegister> =
234188
unknown extends RegisteredConfigType<TRegister, 'defaultSsr'>
235189
? SSROption
@@ -262,3 +216,36 @@ export type ValidateSerializableLifecycleResultSSR<
262216
: RegisteredSSROption<TRegister> extends false
263217
? any
264218
: ValidateSerializableInput<TRegister, LooseReturnType<TFn>>
219+
220+
type ResolveArrayShape<
221+
T extends ReadonlyArray<unknown>,
222+
TSerializable,
223+
TMode extends 'input' | 'result',
224+
> = number extends T['length']
225+
? T extends Array<infer U>
226+
? Array<ResolveArrayElement<U, TSerializable, TMode>>
227+
: ReadonlyArray<ResolveArrayElement<T[number], TSerializable, TMode>>
228+
: ResolveTupleShape<T, TSerializable, TMode>
229+
230+
type ResolveTupleShape<
231+
T extends ReadonlyArray<unknown>,
232+
TSerializable,
233+
TMode extends 'input' | 'result',
234+
> = T extends readonly [infer THead, ...infer TTail]
235+
? readonly [
236+
ResolveArrayElement<THead, TSerializable, TMode>,
237+
...ResolveTupleShape<
238+
TTail extends ReadonlyArray<unknown> ? TTail : [],
239+
TSerializable,
240+
TMode
241+
>,
242+
]
243+
: T
244+
245+
type ResolveArrayElement<
246+
TValue,
247+
TSerializable,
248+
TMode extends 'input' | 'result',
249+
> = TMode extends 'input'
250+
? ValidateSerializable<TValue, TSerializable>
251+
: ValidateSerializableResult<TValue, TSerializable>

0 commit comments

Comments
 (0)