@@ -216,26 +216,94 @@ export type AbiParametersToPrimitiveTypes_named<
216216 // Ideally this is a simple mapped type instead of tail recurision, but TypeScript does not support dynamic tuple labels
217217 // https://github.com/microsoft/TypeScript/issues/44939
218218> = abiParameters extends readonly [
219- infer head extends AbiParameter ,
219+ // Significantly reduce type instantiations by batch proccessing up to six parameters at a time instead of processing one parameter per recursion
220+ infer head1 extends AbiParameter ,
221+ infer head2 extends AbiParameter ,
222+ infer head3 extends AbiParameter ,
223+ infer head4 extends AbiParameter ,
224+ infer head5 extends AbiParameter ,
225+ infer head6 extends AbiParameter ,
220226 ...infer tail extends readonly AbiParameter [ ] ,
221227]
222228 ? AbiParametersToPrimitiveTypes_named <
223229 tail ,
224230 abiParameterKind ,
225- readonly [ ...acc , ...ToNamedTuple < head , abiParameterKind > ]
231+ readonly [
232+ ...acc ,
233+ ...ToNamedTuple < head1 , abiParameterKind > ,
234+ ...ToNamedTuple < head2 , abiParameterKind > ,
235+ ...ToNamedTuple < head3 , abiParameterKind > ,
236+ ...ToNamedTuple < head4 , abiParameterKind > ,
237+ ...ToNamedTuple < head5 , abiParameterKind > ,
238+ ...ToNamedTuple < head6 , abiParameterKind > ,
239+ ]
226240 >
227- : acc extends readonly [ ]
228- ? abiParameters extends readonly [ ]
229- ? readonly [ ]
230- : readonly unknown [ ]
231- : acc
241+ : abiParameters extends readonly [
242+ infer head1 extends AbiParameter ,
243+ infer head2 extends AbiParameter ,
244+ infer head3 extends AbiParameter ,
245+ infer head4 extends AbiParameter ,
246+ infer head5 extends AbiParameter ,
247+ ]
248+ ? readonly [
249+ ...acc ,
250+ ...ToNamedTuple < head1 , abiParameterKind > ,
251+ ...ToNamedTuple < head2 , abiParameterKind > ,
252+ ...ToNamedTuple < head3 , abiParameterKind > ,
253+ ...ToNamedTuple < head4 , abiParameterKind > ,
254+ ...ToNamedTuple < head5 , abiParameterKind > ,
255+ ]
256+ : abiParameters extends readonly [
257+ infer head1 extends AbiParameter ,
258+ infer head2 extends AbiParameter ,
259+ infer head3 extends AbiParameter ,
260+ infer head4 extends AbiParameter ,
261+ ]
262+ ? readonly [
263+ ...acc ,
264+ ...ToNamedTuple < head1 , abiParameterKind > ,
265+ ...ToNamedTuple < head2 , abiParameterKind > ,
266+ ...ToNamedTuple < head3 , abiParameterKind > ,
267+ ...ToNamedTuple < head4 , abiParameterKind > ,
268+ ]
269+ : abiParameters extends readonly [
270+ infer head1 extends AbiParameter ,
271+ infer head2 extends AbiParameter ,
272+ infer head3 extends AbiParameter ,
273+ ]
274+ ? readonly [
275+ ...acc ,
276+ ...ToNamedTuple < head1 , abiParameterKind > ,
277+ ...ToNamedTuple < head2 , abiParameterKind > ,
278+ ...ToNamedTuple < head3 , abiParameterKind > ,
279+ ]
280+ : abiParameters extends readonly [
281+ infer head1 extends AbiParameter ,
282+ infer head2 extends AbiParameter ,
283+ ]
284+ ? readonly [
285+ ...acc ,
286+ ...ToNamedTuple < head1 , abiParameterKind > ,
287+ ...ToNamedTuple < head2 , abiParameterKind > ,
288+ ]
289+ : abiParameters extends readonly [ infer head extends AbiParameter ]
290+ ? readonly [ ...acc , ...ToNamedTuple < head , abiParameterKind > ]
291+ : acc extends readonly [ ]
292+ ? abiParameters extends readonly [ ]
293+ ? readonly [ ]
294+ : readonly unknown [ ]
295+ : acc
232296
233297type ToNamedTuple <
234298 abiParameter extends AbiParameter ,
235299 abiParameterKind extends AbiParameterKind ,
236- ///
237- type = AbiParameterToPrimitiveType < abiParameter , abiParameterKind > ,
238- > = AbiParameterTupleNameLookup < type > [ ( abiParameter & { name : string } ) [ 'name' ] ]
300+ > = unwrapName <
301+ AbiParameterToPrimitiveType < abiParameter , abiParameterKind > ,
302+ abiParameter [ 'name' ]
303+ >
304+ type unwrapName < type , name > = name extends string
305+ ? AbiParameterTupleNameLookup < type > [ name ]
306+ : [ type ]
239307
240308/**
241309 * Checks if type is {@link Abi}.
0 commit comments