{"version":3,"sources":["../../node_modules/viem/utils/abi/encodePacked.ts","../../node_modules/viem/utils/data/isBytes.ts"],"sourcesContent":["import type {\n  AbiParameterToPrimitiveType,\n  AbiType,\n  Address,\n  SolidityAddress,\n  SolidityArrayWithoutTuple,\n  SolidityBool,\n  SolidityBytes,\n  SolidityInt,\n  SolidityString,\n} from 'abitype'\n\nimport {\n  AbiEncodingLengthMismatchError,\n  type AbiEncodingLengthMismatchErrorType,\n  BytesSizeMismatchError,\n  type BytesSizeMismatchErrorType,\n  UnsupportedPackedAbiType,\n} from '../../errors/abi.js'\nimport {\n  InvalidAddressError,\n  type InvalidAddressErrorType,\n} from '../../errors/address.js'\nimport type { ErrorType } from '../../errors/utils.js'\nimport type { Hex } from '../../types/misc.js'\nimport { type IsAddressErrorType, isAddress } from '../address/isAddress.js'\nimport { type ConcatHexErrorType, concatHex } from '../data/concat.js'\nimport { type PadErrorType, pad } from '../data/pad.js'\nimport {\n  type BoolToHexErrorType,\n  type NumberToHexErrorType,\n  type StringToHexErrorType,\n  boolToHex,\n  numberToHex,\n  stringToHex,\n} from '../encoding/toHex.js'\nimport { arrayRegex, bytesRegex, integerRegex } from '../regex.js'\n\ntype PackedAbiType =\n  | SolidityAddress\n  | SolidityBool\n  | SolidityBytes\n  | SolidityInt\n  | SolidityString\n  | SolidityArrayWithoutTuple\n\ntype EncodePackedValues<\n  packedAbiTypes extends readonly PackedAbiType[] | readonly unknown[],\n> = {\n  [K in keyof packedAbiTypes]: packedAbiTypes[K] extends AbiType\n    ? AbiParameterToPrimitiveType<{ type: packedAbiTypes[K] }>\n    : unknown\n}\n\nexport type EncodePackedErrorType =\n  | AbiEncodingLengthMismatchErrorType\n  | ConcatHexErrorType\n  | EncodeErrorType\n  | ErrorType\n\nexport function encodePacked<\n  const packedAbiTypes extends readonly PackedAbiType[] | readonly unknown[],\n>(types: packedAbiTypes, values: EncodePackedValues<packedAbiTypes>): Hex {\n  if (types.length !== values.length)\n    throw new AbiEncodingLengthMismatchError({\n      expectedLength: types.length as number,\n      givenLength: values.length as number,\n    })\n\n  const data: Hex[] = []\n  for (let i = 0; i < (types as unknown[]).length; i++) {\n    const type = types[i]\n    const value = values[i]\n    data.push(encode(type, value))\n  }\n  return concatHex(data)\n}\n\ntype EncodeErrorType =\n  | BoolToHexErrorType\n  | BytesSizeMismatchErrorType\n  | InvalidAddressErrorType\n  | IsAddressErrorType\n  | NumberToHexErrorType\n  | PadErrorType\n  | StringToHexErrorType\n  | UnsupportedPackedAbiType\n  | ErrorType\n\nfunction encode<const packedAbiType extends PackedAbiType | unknown>(\n  type: packedAbiType,\n  value: EncodePackedValues<[packedAbiType]>[0],\n  isArray = false,\n): Hex {\n  if (type === 'address') {\n    const address = value as Address\n    if (!isAddress(address)) throw new InvalidAddressError({ address })\n    return pad(address.toLowerCase() as Hex, {\n      size: isArray ? 32 : null,\n    }) as Address\n  }\n  if (type === 'string') return stringToHex(value as string)\n  if (type === 'bytes') return value as Hex\n  if (type === 'bool')\n    return pad(boolToHex(value as boolean), { size: isArray ? 32 : 1 })\n\n  const intMatch = (type as string).match(integerRegex)\n  if (intMatch) {\n    const [_type, baseType, bits = '256'] = intMatch\n    const size = Number.parseInt(bits) / 8\n    return numberToHex(value as number, {\n      size: isArray ? 32 : size,\n      signed: baseType === 'int',\n    })\n  }\n\n  const bytesMatch = (type as string).match(bytesRegex)\n  if (bytesMatch) {\n    const [_type, size] = bytesMatch\n    if (Number.parseInt(size) !== ((value as Hex).length - 2) / 2)\n      throw new BytesSizeMismatchError({\n        expectedSize: Number.parseInt(size),\n        givenSize: ((value as Hex).length - 2) / 2,\n      })\n    return pad(value as Hex, { dir: 'right', size: isArray ? 32 : null }) as Hex\n  }\n\n  const arrayMatch = (type as string).match(arrayRegex)\n  if (arrayMatch && Array.isArray(value)) {\n    const [_type, childType] = arrayMatch\n    const data: Hex[] = []\n    for (let i = 0; i < value.length; i++) {\n      data.push(encode(childType, value[i], true))\n    }\n    if (data.length === 0) return '0x'\n    return concatHex(data)\n  }\n\n  throw new UnsupportedPackedAbiType(type)\n}\n","import type { ErrorType } from '../../errors/utils.js'\nimport type { ByteArray } from '../../types/misc.js'\n\nexport type IsBytesErrorType = ErrorType\n\nexport function isBytes(value: unknown): value is ByteArray {\n  if (!value) return false\n  if (typeof value !== 'object') return false\n  if (!('BYTES_PER_ELEMENT' in value)) return false\n  return (\n    value.BYTES_PER_ELEMENT === 1 && value.constructor.name === 'Uint8Array'\n  )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AA4DM,SAAU,aAEd,OAAuB,QAA0C;AACjE,MAAI,MAAM,WAAW,OAAO;AAC1B,UAAM,IAAI,+BAA+B;MACvC,gBAAgB,MAAM;MACtB,aAAa,OAAO;KACrB;AAEH,QAAM,OAAc,CAAA;AACpB,WAAS,IAAI,GAAG,IAAK,MAAoB,QAAQ,KAAK;AACpD,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,QAAQ,OAAO,CAAC;AACtB,SAAK,KAAK,OAAO,MAAM,KAAK,CAAC;EAC/B;AACA,SAAO,UAAU,IAAI;AACvB;AAaA,SAAS,OACP,MACA,OACA,UAAU,OAAK;AAEf,MAAI,SAAS,WAAW;AACtB,UAAM,UAAU;AAChB,QAAI,CAAC,UAAU,OAAO;AAAG,YAAM,IAAI,oBAAoB,EAAE,QAAO,CAAE;AAClE,WAAO,IAAI,QAAQ,YAAW,GAAW;MACvC,MAAM,UAAU,KAAK;KACtB;EACH;AACA,MAAI,SAAS;AAAU,WAAO,YAAY,KAAe;AACzD,MAAI,SAAS;AAAS,WAAO;AAC7B,MAAI,SAAS;AACX,WAAO,IAAI,UAAU,KAAgB,GAAG,EAAE,MAAM,UAAU,KAAK,EAAC,CAAE;AAEpE,QAAM,WAAY,KAAgB,MAAM,YAAY;AACpD,MAAI,UAAU;AACZ,UAAM,CAAC,OAAO,UAAU,OAAO,KAAK,IAAI;AACxC,UAAM,OAAO,OAAO,SAAS,IAAI,IAAI;AACrC,WAAO,YAAY,OAAiB;MAClC,MAAM,UAAU,KAAK;MACrB,QAAQ,aAAa;KACtB;EACH;AAEA,QAAM,aAAc,KAAgB,MAAM,UAAU;AACpD,MAAI,YAAY;AACd,UAAM,CAAC,OAAO,IAAI,IAAI;AACtB,QAAI,OAAO,SAAS,IAAI,OAAQ,MAAc,SAAS,KAAK;AAC1D,YAAM,IAAI,uBAAuB;QAC/B,cAAc,OAAO,SAAS,IAAI;QAClC,YAAa,MAAc,SAAS,KAAK;OAC1C;AACH,WAAO,IAAI,OAAc,EAAE,KAAK,SAAS,MAAM,UAAU,KAAK,KAAI,CAAE;EACtE;AAEA,QAAM,aAAc,KAAgB,MAAM,UAAU;AACpD,MAAI,cAAc,MAAM,QAAQ,KAAK,GAAG;AACtC,UAAM,CAAC,OAAO,SAAS,IAAI;AAC3B,UAAM,OAAc,CAAA;AACpB,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,WAAK,KAAK,OAAO,WAAW,MAAM,CAAC,GAAG,IAAI,CAAC;IAC7C;AACA,QAAI,KAAK,WAAW;AAAG,aAAO;AAC9B,WAAO,UAAU,IAAI;EACvB;AAEA,QAAM,IAAI,yBAAyB,IAAI;AACzC;;;ACtIM,SAAU,QAAQ,OAAc;AACpC,MAAI,CAAC;AAAO,WAAO;AACnB,MAAI,OAAO,UAAU;AAAU,WAAO;AACtC,MAAI,EAAE,uBAAuB;AAAQ,WAAO;AAC5C,SACE,MAAM,sBAAsB,KAAK,MAAM,YAAY,SAAS;AAEhE;","names":[]}