@@ -32,7 +32,7 @@ export interface CreateSerializationAdapterOptions<TInput, TOutput> {
3232
3333export 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
5250export 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-
9773export type RegisteredReadableStream =
9874 unknown extends SerializerExtensions [ 'ReadableStream' ]
9975 ? never
@@ -199,7 +175,7 @@ export type ValidateSerializableInputResult<TRegister, T> =
199175
200176export 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-
233187export 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