Skip to main content

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
]