diff --git a/packages/abitype/src/human-readable/parseAbiParameters.test-d.ts b/packages/abitype/src/human-readable/parseAbiParameters.test-d.ts index e3e469fa..0f708e74 100644 --- a/packages/abitype/src/human-readable/parseAbiParameters.test-d.ts +++ b/packages/abitype/src/human-readable/parseAbiParameters.test-d.ts @@ -109,4 +109,52 @@ test('parseAbiParameters', () => { expectTypeOf(parseAbiParameters(param)).toEqualTypeOf< readonly AbiParameter[] >() + + expectTypeOf(parseAbiParameters(['(uint256 a),(uint256 b)'])).toEqualTypeOf< + readonly [ + { + readonly type: 'tuple' + readonly components: readonly [ + { + readonly type: 'uint256' + readonly name: 'a' + }, + ] + }, + { + readonly type: 'tuple' + readonly components: readonly [ + { + readonly type: 'uint256' + readonly name: 'b' + }, + ] + }, + ] + >() + + expectTypeOf( + parseAbiParameters(['(uint256 a)', '(uint256 b)']), + ).toEqualTypeOf< + readonly [ + { + readonly type: 'tuple' + readonly components: readonly [ + { + readonly type: 'uint256' + readonly name: 'a' + }, + ] + }, + { + readonly type: 'tuple' + readonly components: readonly [ + { + readonly type: 'uint256' + readonly name: 'b' + }, + ] + }, + ] + >() }) diff --git a/packages/abitype/src/human-readable/parseAbiParameters.ts b/packages/abitype/src/human-readable/parseAbiParameters.ts index da02d918..de1f08ce 100644 --- a/packages/abitype/src/human-readable/parseAbiParameters.ts +++ b/packages/abitype/src/human-readable/parseAbiParameters.ts @@ -52,7 +52,9 @@ export type ParseAbiParameters< : never } extends infer Mapped extends readonly unknown[] ? Filter extends readonly [...infer Content] - ? DeepFlatten + ? Content['length'] extends 0 + ? never + : DeepFlatten : never : never : never @@ -142,5 +144,5 @@ export function parseAbiParameters< if (abiParameters.length === 0) throw new InvalidAbiParametersError({ params }) - return abiParameters as unknown as ParseAbiParameters + return abiParameters as ParseAbiParameters }