Skip to content

Commit

Permalink
...
Browse files Browse the repository at this point in the history
  • Loading branch information
DeepDoge committed Oct 17, 2024
1 parent c231297 commit 8687e35
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 24 deletions.
27 changes: 12 additions & 15 deletions types/ethers6/typedContract.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,22 +39,19 @@ type ProcessAbi<
TAbi extends Abi,
R extends {
[key: string]: (...args: any[]) => any
} = {}
> = TAbi extends readonly [infer Current extends Abi.Item, ...infer Tail extends readonly Abi.Item[]]
? Current extends { type: "function" }
? ProcessAbi<
} = {},
> =
TAbi extends readonly [infer Current extends Abi.Item, ...infer Tail extends readonly Abi.Item[]] ?
Current extends { type: "function" } ?
ProcessAbi<
Tail,
R & {
[K in Current["name"]]: (
...args: ToTypeTuple<Current["inputs"], "input">
) => Promise<
Current["outputs"]["length"] extends 0
? ContractTransaction
: Current["outputs"]["length"] extends 1
? ToTypeTuple<Current["outputs"], "output">[0]
: ToTypeTuple<Current["outputs"], "output">
[K in Current["name"]]: (...args: ToTypeTuple<Current["inputs"], "input">) => Promise<
Current["outputs"]["length"] extends 0 ? ContractTransaction
: Current["outputs"]["length"] extends 1 ? ToTypeTuple<Current["outputs"], "output">[0]
: ToTypeTuple<Current["outputs"], "output">
>
}
>
: ProcessAbi<Tail, R>
: R
>
: ProcessAbi<Tail, R>
: R
18 changes: 9 additions & 9 deletions types/type.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { AddressLike, BytesLike } from "ethers"
import type { AddressLike, BytesLike } from "ethers"
import { Abi } from "./abi"

declare const LABEL: unique symbol
Expand All @@ -9,15 +9,15 @@ export type TupleItem = Abi.FunctionItem.Input | Abi.FunctionItem.Output
export type ToTypeTuple<
TypeStrings extends readonly TupleItem[],
Mode extends "input" | "output",
R extends readonly any[] = readonly []
> = TypeStrings extends readonly [infer Current extends TupleItem, ...infer Tail extends readonly TupleItem[]]
? ToTypeTuple<Tail, Mode, readonly [...R, _<Current["name"], ToType<Current["type"], Mode>>]>
: R
R extends readonly any[] = readonly [],
> =
TypeStrings extends readonly [infer Current extends TupleItem, ...infer Tail extends readonly TupleItem[]] ?
ToTypeTuple<Tail, Mode, readonly [...R, _<Current["name"], ToType<Current["type"], Mode>>]>
: R

export type ToType<T extends string, Mode extends "input" | "output"> = T extends keyof PrimativeTypeMap
? PrimativeTypeMap[T][Mode]
: T extends `${infer T}[]`
? ToType<T, Mode>[]
export type ToType<T extends string, Mode extends "input" | "output"> =
T extends keyof PrimativeTypeMap ? PrimativeTypeMap[T][Mode]
: T extends `${infer T}[]` ? ToType<T, Mode>[]
: never

export type PrimativeTypeMap = {
Expand Down

0 comments on commit 8687e35

Please sign in to comment.