Comparing version 0.0.3 to 0.0.4
@@ -9,3 +9,3 @@ import { MultiplesOf8To256, Range } from './types'; | ||
export declare type SolInt = `${'u' | ''}int${MultiplesOf8To256 | ''}`; | ||
export declare type SolFixedArrayRange = Range<2, 10>[number]; | ||
export declare type SolFixedArrayRange = Range<1, 10>[number]; | ||
export declare type SolFixedArrayLookup = { | ||
@@ -17,3 +17,3 @@ [Prop in SolFixedArrayRange as `${Prop}`]: Prop; | ||
export declare type Address = `0x${string}`; | ||
export declare type AbiInternalType = AbiType | `contract ${string}` | `struct ${string}`; | ||
export declare type AbiInternalType = AbiType | `address ${string}` | `contract ${string}` | `enum ${string}` | `struct ${string}`; | ||
export declare type AbiParameter = { | ||
@@ -39,2 +39,7 @@ type: AbiType; | ||
/** | ||
* @deprecated Vyper used to provide gas estimates | ||
* https://github.com/vyperlang/vyper/issues/2151 | ||
*/ | ||
gas?: number; | ||
/** | ||
* @deprecated use `payable` or `nonpayable` from {@link AbiStateMutability} instead | ||
@@ -41,0 +46,0 @@ * https://github.com/ethereum/solidity/issues/992 |
export type { Abi, AbiError, AbiEvent, AbiFunction, AbiInternalType, AbiParameter, AbiParameterType, AbiStateMutability, AbiType, Address, SolAddress, SolArray, SolBool, SolBytes, SolFunction, SolInt, SolString, SolTuple, } from './abi'; | ||
export type { AbiParameterToPrimitiveType, AbiParametersToPrimitiveTypes, AbiTypeToPrimitiveType, ExtractAbiFunction, ExtractAbiFunctionNames, ExtractAbiFunctionParameters, ExtractAbiFunctions, IsAbi, } from './utils'; | ||
export type { AbiParameterToPrimitiveType, AbiParametersToPrimitiveTypes, AbiTypeToPrimitiveType, ExtractAbiEvent, ExtractAbiEvents, ExtractAbiEventNames, ExtractAbiEventParameters, ExtractAbiFunction, ExtractAbiFunctionNames, ExtractAbiFunctionParameters, ExtractAbiFunctions, IsAbi, } from './utils'; |
@@ -8,7 +8,4 @@ /** | ||
* @example | ||
* | ||
* ```ts | ||
* // Returns 3 | ||
* type Result = LengthOfString<'baz'> | ||
* ``` | ||
* 3 | ||
*/ | ||
@@ -24,7 +21,4 @@ export declare type LengthOfString<TString extends string, _Res extends 1[] = []> = TString extends `${string}${infer Rest}` ? LengthOfString<Rest, [..._Res, 1]> : _Res['length']; | ||
* @example | ||
* | ||
* ```ts | ||
* // Returns { name: string }[] | ||
* type Result = Equal<'tuple[]', { name: string }}> | ||
* ``` | ||
* { name: string }[] | ||
*/ | ||
@@ -40,7 +34,4 @@ export declare type MaybeArray<TString extends string, Value> = TString extends `${any}[]` ? Value[] : Value; | ||
* @example | ||
* | ||
* ```ts | ||
* // Returns [1, 2, 3] | ||
* type Result = Range<1, 3> | ||
*``` | ||
* [1, 2, 3] | ||
*/ | ||
@@ -57,7 +48,4 @@ export declare type Range<Start extends number, Stop extends number, _Res extends number[] = [], _Padding extends 0[] = [], _Current extends number = [..._Padding, ..._Res]['length'] & number> = _Current extends Stop ? _Current extends Start ? [_Current] : _Res extends [] ? [] : [..._Res, _Current] : _Current extends Start ? Range<Start, Stop, [_Current], _Padding> : _Res extends [] ? Range<Start, Stop, [], [..._Padding, 0]> : Range<Start, Stop, [..._Res, _Current], _Padding>; | ||
* @example | ||
* | ||
* ```ts | ||
* // Returns foobaz | ||
* type Result = Replace<'foobar', 'bar', 'baz'> | ||
*``` | ||
* 'foobaz' | ||
*/ | ||
@@ -73,7 +61,4 @@ export declare type Replace<TString extends string, From extends string, To extends string> = From extends '' ? TString : TString extends `${infer H}${From}${infer R}` ? `${H}${To}${R}` : TString; | ||
* @example | ||
* | ||
* ```ts | ||
* // Returns [string, string] | ||
* type Result = Tuple<string, 2> | ||
* ``` | ||
* [string, string] | ||
*/ | ||
@@ -80,0 +65,0 @@ export declare type Tuple<T, N extends number> = N extends N ? number extends N ? T[] : _TupleOf<T, N, []> : never; |
@@ -1,2 +0,2 @@ | ||
import { Abi, AbiParameter, AbiParameterType, AbiStateMutability, AbiType, Address, SolAddress, SolBool, SolBytes, SolFixedArrayLookup, SolFunction, SolInt, SolString, SolTuple } from './abi'; | ||
import { Abi, AbiParameter, AbiParameterType, AbiStateMutability, AbiType, Address, SolAddress, SolArray, SolBool, SolBytes, SolFixedArrayLookup, SolFunction, SolInt, SolString, SolTuple } from './abi'; | ||
import { MaybeArray, Tuple } from './types'; | ||
@@ -6,3 +6,3 @@ /** | ||
* | ||
* Note: Does not include tuple conversion. Use {@link AbiParameterToPrimitiveType} to also convert tuples. | ||
* Note: Does not include full array or tuple conversion. Use {@link AbiParameterToPrimitiveType} to also convert arrays and tuples. | ||
* | ||
@@ -12,3 +12,3 @@ * @param TAbiType - {@link AbiType} to convert to TypeScript representation. | ||
*/ | ||
export declare type AbiTypeToPrimitiveType<TAbiType extends AbiType> = TAbiType extends `${infer T}[]` ? AbiTypeToPrimitiveType<T extends AbiType ? T : any>[] : TAbiType extends SolAddress ? Address : TAbiType extends SolString ? string : TAbiType extends SolBool ? boolean : TAbiType extends SolFunction ? `${Address}${string}` : TAbiType extends SolBytes ? string | ArrayLike<number> : TAbiType extends SolInt ? bigint | number : TAbiType extends `${infer T}[${infer M}]` ? M extends keyof SolFixedArrayLookup ? Tuple<AbiTypeToPrimitiveType<T extends AbiType ? T : any>, SolFixedArrayLookup[M]> : AbiTypeToPrimitiveType<T extends AbiType ? T : any>[] : unknown; | ||
export declare type AbiTypeToPrimitiveType<TAbiType extends AbiType> = TAbiType extends SolAddress ? Address : TAbiType extends SolString ? string : TAbiType extends SolBool ? boolean : TAbiType extends SolFunction ? `${Address}${string}` : TAbiType extends SolBytes ? string | ArrayLike<number> : TAbiType extends SolInt ? bigint | number : TAbiType extends SolTuple ? Record<string, unknown> : TAbiType extends SolArray ? unknown[] : unknown; | ||
/** | ||
@@ -21,5 +21,2 @@ * Converts {@link AbiParameter} to corresponding TypeScript primitive type. | ||
* @example | ||
* | ||
* ```ts | ||
* // Returns string | ||
* type Result = AbiParameterToPrimitiveType<{ | ||
@@ -30,5 +27,13 @@ * internalType: 'string' | ||
* }> | ||
* ``` | ||
* string | ||
*/ | ||
export declare type AbiParameterToPrimitiveType<TAbiParameter extends AbiParameter> = TAbiParameter['type'] extends `${SolTuple}${'' | '[]'}` ? MaybeArray<TAbiParameter['type'], { | ||
export declare type AbiParameterToPrimitiveType<TAbiParameter extends AbiParameter> = TAbiParameter['type'] extends `${infer T}[${infer M}]` ? M extends keyof SolFixedArrayLookup ? Tuple<AbiParameterToPrimitiveType<{ | ||
[Property in keyof Omit<TAbiParameter, 'type'>]: TAbiParameter[Property]; | ||
} & { | ||
type: T extends AbiType ? T : any; | ||
}>, SolFixedArrayLookup[M]> : AbiParameterToPrimitiveType<{ | ||
[Property in keyof Omit<TAbiParameter, 'type'>]: TAbiParameter[Property]; | ||
} & { | ||
type: T extends AbiType ? T : any; | ||
}>[] : TAbiParameter['type'] extends `${SolTuple}${'' | '[]'}` ? MaybeArray<TAbiParameter['type'], { | ||
[Component in (TAbiParameter & { | ||
@@ -39,2 +44,11 @@ components: readonly AbiParameter[]; | ||
/** | ||
* Converts array of {@link AbiParameter} to corresponding TypeScript primitive types. | ||
* | ||
* @param TAbiParameters - Array of {@link AbiParameter} to convert to TypeScript representations. | ||
* @returns Array of TypeScript primitive types | ||
*/ | ||
export declare type AbiParametersToPrimitiveTypes<TAbiParameters extends readonly AbiParameter[]> = { | ||
[K in keyof TAbiParameters]: AbiParameterToPrimitiveType<TAbiParameters[K]>; | ||
}; | ||
/** | ||
* Checks if type is {@link Abi} | ||
@@ -46,14 +60,13 @@ * | ||
* @example | ||
* type Result = IsAbi<typeof erc20Abi> | ||
* | ||
* ```ts | ||
* // Returns true | ||
* type Result = IsAbi<typeof erc20Abi> | ||
* ``` | ||
* true | ||
*/ | ||
export declare type IsAbi<TAbi> = TAbi extends Abi ? true : false; | ||
/** | ||
* Extracts all {@link AbiFunction}s from {@link Abi} | ||
* Extracts all {@link AbiFunction} types from {@link Abi} | ||
* | ||
* @param TAbi - {@link Abi} to extract functions from. | ||
* @returns Boolean for whether {@link TAbi} is {@link Abi}. | ||
* @param TAbiStateMutibility - {@link AbiStateMutability} to filter by. | ||
* @returns All {@link AbiFunction} types from {@link Abi}. | ||
*/ | ||
@@ -68,10 +81,9 @@ export declare type ExtractAbiFunctions<TAbi extends Abi, TAbiStateMutibility extends AbiStateMutability = AbiStateMutability> = Extract<TAbi[number], { | ||
* @param TAbi - {@link Abi} to extract function names from. | ||
* @param TAbiStateMutibility - {@link AbiStateMutability} to filter by. | ||
* @returns Union of function names | ||
* | ||
* @example | ||
* type Result = ExtractAbiFunctionNames<typeof erc20Abi> | ||
* | ||
* ```ts | ||
* // Returns 'tokenURI' | 'symbol' | 'totalSupply' | ... | ||
* type Result = ExtractAbiFunctionNames<typeof erc20Abi> | ||
* ``` | ||
* 'balanceOf' | 'decimals' | 'name' | 'symbol' | 'totalSupply' | ||
*/ | ||
@@ -87,8 +99,19 @@ export declare type ExtractAbiFunctionNames<TAbi extends Abi, TAbiStateMutibility extends AbiStateMutability = AbiStateMutability> = ExtractAbiFunctions<TAbi, TAbiStateMutibility>['name']; | ||
* @example | ||
* type Result = ExtractAbiFunction<typeof erc20Abi, 'tokenURI'> | ||
* | ||
* ```ts | ||
* // Returns | ||
* // { type: 'function', name: 'tokenURI', stateMutability: 'pure', inputs: [...], outputs: [...] } | ||
* type Result = ExtractAbiFunction<typeof erc20Abi, 'tokenURI'> | ||
* ``` | ||
* { | ||
* type: 'function', | ||
* name: 'tokenURI', | ||
* stateMutability: 'pure', | ||
* inputs: [{ | ||
* internalType: 'uint256', | ||
* name: 'tokenId', | ||
* type: 'uint256', | ||
* }], | ||
* outputs: [{ | ||
* internalType: 'string', | ||
* name: '', | ||
* type: 'string' | ||
* }], | ||
* } | ||
*/ | ||
@@ -99,3 +122,3 @@ export declare type ExtractAbiFunction<TAbi extends Abi, TFunctionName extends ExtractAbiFunctionNames<TAbi>> = Extract<ExtractAbiFunctions<TAbi>, { | ||
/** | ||
* Extracts {@link AbiParameter}s for function name from {@link Abi}. | ||
* Extracts {@link AbiParameter} types for function name from {@link Abi}. | ||
* | ||
@@ -108,18 +131,82 @@ * @param TAbi - {@link Abi} to extract {@link AbiParameter}s from. | ||
* @example | ||
* type Result = ExtractAbiFunctionParameters<typeof erc20Abi, 'tokenURI', 'inputs'> | ||
* | ||
* ```ts | ||
* // Returns | ||
* // { internalType: 'uint256', name: 'tokenId', type: 'uint256' } | ||
* type Result = ExtractAbiFunctionParameters<typeof erc20Abi, 'tokenURI', 'inputs'> | ||
* ``` | ||
* [{ | ||
* internalType: 'uint256', | ||
* name: 'tokenId', | ||
* type: 'uint256', | ||
* }] | ||
*/ | ||
export declare type ExtractAbiFunctionParameters<TAbi extends Abi, TFunctionName extends ExtractAbiFunctionNames<TAbi>, TAbiParameterType extends AbiParameterType> = ExtractAbiFunction<TAbi, TFunctionName>[TAbiParameterType]; | ||
/** | ||
* Converts array of {@link AbiParameter} to corresponding TypeScript primitive types. | ||
* Extracts all {@link AbiEvent} types from {@link Abi} | ||
* | ||
* @param TAbiParameters - Array of {@link AbiParameter} to convert to TypeScript representations. | ||
* @returns Array of TypeScript primitive types | ||
* @param TAbi - {@link Abi} to extract functions from. | ||
* @returns Boolean for whether {@link TAbi} is {@link Abi}. | ||
*/ | ||
export declare type AbiParametersToPrimitiveTypes<TAbiParameters extends readonly AbiParameter[]> = TAbiParameters['length'] extends 0 ? undefined : TAbiParameters['length'] extends 1 ? AbiParameterToPrimitiveType<TAbiParameters[0]> : { | ||
[K in keyof TAbiParameters]: AbiParameterToPrimitiveType<TAbiParameters[K]>; | ||
}; | ||
export declare type ExtractAbiEvents<TAbi extends Abi> = Extract<TAbi[number], { | ||
type: 'event'; | ||
}>; | ||
/** | ||
* @description Extracts all {@link AbiEvent} names from {@link Abi} | ||
* | ||
* @param TAbi - {@link Abi} to extract event names from. | ||
* @returns Union of event names | ||
* | ||
* @example | ||
* type Result = ExtractAbiEventNames<typeof erc20Abi> | ||
* | ||
* 'approval' | 'transfer' | ||
*/ | ||
export declare type ExtractAbiEventNames<TAbi extends Abi> = ExtractAbiEvents<TAbi>['name']; | ||
/** | ||
* Extracts {@link AbiEvent} with name from {@link Abi} | ||
* | ||
* @param TAbi - {@link Abi} to extract {@link AbiEvent} from. | ||
* @param TEventName - String name of event to extract from {@link Abi} | ||
* @returns Matching {@link AbiEvent} | ||
* | ||
* @example | ||
* type Result = ExtractAbiEvent<typeof erc20Abi, 'transfer'> | ||
* | ||
* { | ||
* type: 'event', | ||
* name: 'Transfer', | ||
* anonymous: false, | ||
* inputs: [ | ||
* { indexed: true, internalType: 'address', name: 'from', type: 'address' }, | ||
* { indexed: true, internalType: 'address', name: 'to', type: 'address' }, | ||
* { | ||
* indexed: false, | ||
* internalType: 'uint256', | ||
* name: 'value', | ||
* type: 'uint256', | ||
* }, | ||
* ], | ||
* } | ||
*/ | ||
export declare type ExtractAbiEvent<TAbi extends Abi, TEventName extends ExtractAbiEventNames<TAbi>> = Extract<ExtractAbiEvents<TAbi>, { | ||
name: TEventName; | ||
}>; | ||
/** | ||
* Extracts {@link AbiParameter} types for event name from {@link Abi}. | ||
* | ||
* @param TAbi - {@link Abi} to extract {@link AbiParameter}s from. | ||
* @param TEventName - String name of event | ||
* @returns Array of {@link AbiParameter} | ||
* | ||
* @example | ||
* type Result = ExtractAbiFunctionParameters<typeof erc20Abi, 'transfer'> | ||
* | ||
* [ | ||
* { indexed: true, internalType: 'address', name: 'from', type: 'address' }, | ||
* { indexed: true, internalType: 'address', name: 'to', type: 'address' }, | ||
* { | ||
* indexed: false, | ||
* internalType: 'uint256', | ||
* name: 'value', | ||
* type: 'uint256', | ||
* }, | ||
* ] | ||
*/ | ||
export declare type ExtractAbiEventParameters<TAbi extends Abi, TEventName extends ExtractAbiEventNames<TAbi>> = ExtractAbiEvent<TAbi, TEventName>['inputs']; |
{ | ||
"name": "abitype", | ||
"license": "WAGMIT", | ||
"version": "0.0.3", | ||
"version": "0.0.4", | ||
"repository": { | ||
@@ -6,0 +6,0 @@ "type": "git", |
@@ -43,6 +43,8 @@ # ABIType | ||
Thanks to indreams.eth ([@strollinghome](https://twitter.com/strollinghome)) for answering Solidity questions! | ||
## Thanks | ||
- indreams.eth ([@strollinghome](https://twitter.com/strollinghome)) for answering Solidity questions! | ||
## License | ||
[WAGMIT](/LICENSE) License |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
18688
352
50