ox
Version:
Ethereum Standard Library
41 lines • 1.83 kB
TypeScript
import type { AbiEventParameter, AbiParameter } from 'abitype';
import type { IsNarrowable, Join } from './types.js';
import type { AssertName } from './types/signatures.js';
/**
* Formats `AbiParameter` to human-readable ABI parameter.
*
* @param abiParameter - ABI parameter
* @returns Human-readable ABI parameter
*/
export type FormatAbiParameter<abiParameter extends AbiParameter | AbiEventParameter> = abiParameter extends {
name?: infer name extends string;
type: `tuple${infer array}`;
components: infer components extends readonly AbiParameter[];
indexed?: infer indexed extends boolean;
} ? FormatAbiParameter<{
type: `(${Join<{
[key in keyof components]: FormatAbiParameter<{
type: components[key]['type'];
} & (IsNarrowable<components[key]['name'], string> extends true ? {
name: components[key]['name'];
} : unknown) & (components[key] extends {
components: readonly AbiParameter[];
} ? {
components: components[key]['components'];
} : unknown)>;
}, ', '>})${array}`;
} & (IsNarrowable<name, string> extends true ? {
name: name;
} : unknown) & (IsNarrowable<indexed, boolean> extends true ? {
indexed: indexed;
} : unknown)> : `${abiParameter['type']}${abiParameter extends {
indexed: true;
} ? ' indexed' : ''}${abiParameter['name'] extends infer name extends string ? name extends '' ? '' : ` ${AssertName<name>}` : ''}`;
/**
* Formats `AbiParameter` to human-readable ABI parameter.
*
* @param abiParameter - ABI parameter
* @returns Human-readable ABI parameter
*/
export declare function formatAbiParameter<const abiParameter extends AbiParameter | AbiEventParameter>(abiParameter: abiParameter): FormatAbiParameter<abiParameter>;
//# sourceMappingURL=formatAbiParameter.d.ts.map