decodeConstr
export function decodeConstr<
Decoders extends Decoder<any>
| Decoder<any>[]
| [Decoder<any>, ...Decoder<any>[]]
>(
bytes: BytesLike,
fieldDecoder: Decoders extends [Decoder<any>, ...Decoder<any>[]]
? [...Decoders<Decoders<Decoders>>[]]
: Decoders extends any[]
? [...Decoders<Decoders<Decoders>>[]]
: Decoders
): [
number,
Decoders extends any[]
? {[D in string
| number
| symbol]: Decoders<Decoders>[D] extends Decoder<T>
? T
: never}
: Decoders extends Decoder<T>
? T[]
: never
]
The homogenous field type case is used by the uplc ConstrData (undetermined number of UplcData items)
Type parameters
Decoders
Decoders extends Decoder<any>
| Decoder<any>[]
| [Decoder<any>, ...Decoder<any>[]]
Arguments
1. bytes
bytes: BytesLike
Note: the conditional tuple check loses the tupleness if we just check against array, hence first we check against a tuple, and then an array (needed for the empty case)
2. fieldDecoder
fieldDecoder: Decoders extends [Decoder<any>, ...Decoder<any>[]]
? [...Decoders<Decoders<Decoders>>[]]
: Decoders extends any[]
? [...Decoders<Decoders<Decoders>>[]]
: Decoders
array for heterogenous item types, single function for homogenous item types
Returns
[
number,
Decoders extends any[]
? {[D in string
| number
| symbol]: Decoders<Decoders>[D] extends Decoder<T>
? T
: never}
: Decoders extends Decoder<T>
? T[]
: never
]