import type * as abitype from 'abitype';
import type * as Errors from './Errors.js';
import * as formatAbiParameter from './internal/human-readable/formatAbiParameter.js';
import * as parseAbiParameter from './internal/human-readable/parseAbiParameter.js';
/** Root type for an ABI parameter. */
export type AbiParameter = abitype.AbiParameter;
/** A parameter on an ABI event. */
export type AbiEventParameter = abitype.AbiEventParameter;
export { InvalidAbiParameterError, InvalidAbiTypeParameterError, InvalidFunctionModifierError, InvalidModifierError, InvalidParameterError, SolidityProtectedKeywordError, } from './internal/human-readable/errors.js';
export { InvalidParenthesisError } from './internal/human-readable/errors.js';
/**
 * Formats an {@link ox#AbiParameter.AbiParameter} into a **Human Readable ABI Parameter**.
 *
 * @example
 * ```ts twoslash
 * import { AbiParameter } from 'ox'
 *
 * const formatted = AbiParameter.format({
 *   name: 'spender',
 *   type: 'address'
 * })
 *
 * formatted
 * //    ^?
 * ```
 *
 * @param parameter - The ABI Parameter to format.
 * @returns The formatted ABI Parameter.
 */
export declare function format<const parameter extends AbiParameter | AbiEventParameter>(parameter: parameter | AbiParameter | AbiEventParameter): format.ReturnType<parameter>;
export declare namespace format {
    type ReturnType<parameter extends AbiParameter | AbiEventParameter = AbiParameter> = formatAbiParameter.FormatAbiParameter<parameter>;
    type ErrorType = Errors.GlobalErrorType;
}
/**
 * Parses an arbitrary **JSON ABI Parameter** or **Human Readable ABI Parameter** into a typed {@link ox#AbiParameter.AbiParameter}.
 *
 * @example
 * ### JSON Parameters
 *
 * ```ts twoslash
 * import { AbiParameter } from 'ox'
 *
 * const parameter = AbiParameter.from({
 *   name: 'spender',
 *   type: 'address'
 * })
 *
 * parameter
 * //^?
 * ```
 *
 * @example
 * ### Human Readable Parameters
 *
 * ```ts twoslash
 * import { AbiParameter } from 'ox'
 *
 * const parameter = AbiParameter.from('address spender')
 *
 * parameter
 * //^?
 * ```
 *
 * @example
 * It is possible to specify `struct`s along with your definition:
 *
 * ```ts twoslash
 * import { AbiParameter } from 'ox'
 *
 * const parameter = AbiParameter.from([
 *   'struct Foo { address spender; uint256 amount; }',
 *   'Foo foo'
 * ])
 *
 * parameter
 * //^?
 * ```
 *
 * @param parameter - The ABI Parameter to parse.
 * @returns The typed ABI Parameter.
 */
export declare function from<const parameter extends AbiParameter | string | readonly string[]>(parameter: parameter | AbiParameter | string | readonly string[]): from.ReturnType<parameter>;
export declare namespace from {
    type ReturnType<parameter extends AbiParameter | string | readonly string[]> = parameter extends string ? parseAbiParameter.ParseAbiParameter<parameter> : parameter extends readonly string[] ? parseAbiParameter.ParseAbiParameter<parameter> : parameter;
    type ErrorType = Errors.GlobalErrorType;
}
//# sourceMappingURL=AbiParameter.d.ts.map