@etherspot/data-utils
Version:
Etherspot Data Utils
1 lines • 6.42 kB
Source Map (JSON)
{"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":[]}