{"_id":"@bradthomasbrown/abi","name":"@bradthomasbrown/abi","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@bradthomasbrown/abi","description":"Minimal, unoptimized, unaudited, and experimental ABI encoder/decoder library in JavaScript/TypeScript.","version":"1.0.0","author":{"name":"Brad Brown","email":"https://t.me/bradthomasbrown"},"type":"module","exports":{".":"./dist/abi.js"},"dependencies":{"@bradthomasbrown/keccak":"^1.0.2"},"devDependencies":{"@types/bun":"^1.3.6"},"gitHead":"667654aaea14d6db3d177c56e00af30ecc15b4c8","_id":"@bradthomasbrown/abi@1.0.0","_nodeVersion":"22.16.0","_npmVersion":"11.7.0","dist":{"integrity":"sha512-41Vm7zE4VAwUrHtpKce9WdMcX/xyuYZjPTIyVquHGg6gpQdDp0mf9oA3no5gN/lQU2/D4orlCIif+sSdQc34Pw==","shasum":"ee30f5d2f06b361d8436936a1a1674a7a02e9af1","tarball":"https://registry.npmjs.org/@bradthomasbrown/abi/-/abi-1.0.0.tgz","fileCount":5,"unpackedSize":16846,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC0XZdUmUgbl8jQICHkTmJkx0py/m3MHMH/x/mQgRyMWQIgBpbeWpUfTed6aCoZMJZ3w0B6cLh2MZgnUTJQto+Nk+Y="}]},"_npmUser":{"name":"bradthomasbrown","email":"bradthomasbrown@outlook.com"},"directories":{},"maintainers":[{"name":"bradthomasbrown","email":"bradthomasbrown@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/abi_1.0.0_1768867322838_0.21784181852870033"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-20T00:02:02.763Z","1.0.0":"2026-01-20T00:02:03.000Z","modified":"2026-01-20T00:02:03.224Z"},"maintainers":[{"name":"bradthomasbrown","email":"bradthomasbrown@outlook.com"}],"description":"Minimal, unoptimized, unaudited, and experimental ABI encoder/decoder library in JavaScript/TypeScript.","author":{"name":"Brad Brown","email":"https://t.me/bradthomasbrown"},"readme":"# abi\r\nThis is a simple, minimal implementation of Ethereum ABI encoding and decoding in TypeScript/JavaScript.\r\n\r\n## Installation\r\n```sh\r\nnpm i @bradthomasbrown/abi\r\n```\r\n\r\n## Usage\r\n```typescript\r\n/* Example ABI with an overload\r\n[\r\n\t{\r\n\t\t\"inputs\": [\r\n\t\t\t{\r\n\t\t\t\t\"internalType\": \"uint256\",\r\n\t\t\t\t\"name\": \"a\",\r\n\t\t\t\t\"type\": \"uint256\"\r\n\t\t\t}\r\n\t\t],\r\n\t\t\"name\": \"_df639c_\",\r\n\t\t\"outputs\": [\r\n\t\t\t{\r\n\t\t\t\t\"internalType\": \"uint256\",\r\n\t\t\t\t\"name\": \"value\",\r\n\t\t\t\t\"type\": \"uint256\"\r\n\t\t\t}\r\n\t\t],\r\n\t\t\"stateMutability\": \"pure\",\r\n\t\t\"type\": \"function\"\r\n\t},\r\n\t{\r\n\t\t\"inputs\": [\r\n\t\t\t{\r\n\t\t\t\t\"internalType\": \"string\",\r\n\t\t\t\t\"name\": \"a\",\r\n\t\t\t\t\"type\": \"string\"\r\n\t\t\t}\r\n\t\t],\r\n\t\t\"name\": \"_df639c_\",\r\n\t\t\"outputs\": [\r\n\t\t\t{\r\n\t\t\t\t\"internalType\": \"string\",\r\n\t\t\t\t\"name\": \"text\",\r\n\t\t\t\t\"type\": \"string\"\r\n\t\t\t}\r\n\t\t],\r\n\t\t\"stateMutability\": \"pure\",\r\n\t\t\"type\": \"function\"\r\n\t}\r\n]\r\n*/\r\n\r\nimport { encode, decode, _655c97_, _869645_ } from \"@bradthomasbrown/abi\";\r\nimport * as _0b1577_ from \"./0b1577/dist/0b1577\";\r\n\r\nfunction bufferToHex(buffer:ArrayBuffer):string {\r\n    return new Uint8Array(buffer).toHex();\r\n}\r\n\r\n// these first usage examples are how to use `abi` in a low-level and direct way \r\n\r\nconst abiJson = await Bun.file(\"./test/0b1577/src/0b1577.abi\").json();\r\nconst _0a_ = abiJson[0]; // get the first abi fragment, the uint overload\r\nconst _6d_ = [0x123456789n]; // an array of values to be used in ABI encoding\r\nconst _aa_ = _655c97_(_0a_, \"inputs\"); // builds a \"first pass\" metadata tree\r\nconst _56_ = _869645_(_aa_, _6d_); // builds a \"second pass\" metadata tree for encoding. necessary since string arrays etc. final buffer size is dependent on actual values used\r\nconst _ae_ = encode(false, _56_, _6d_); // performs the actual encoding, creates the final buffer immediately since second pass cause size to be known. only the final buffer is worked on\r\nconsole.log(bufferToHex(_ae_));\r\n// b1e56dfc0000000000000000000000000000000000000000000000000000000123456789\r\n\r\n// sample output for us to decode for first overload\r\nconst _f4_ = Uint8Array.fromHex(\"0x0000000000000000000000000000000000000000000000000000000123456789\".slice(2)).buffer;\r\nconst _dd_ = abiJson[0];\r\nconst _3e_ = _655c97_(_dd_, \"outputs\");\r\nconsole.log(decode(_f4_, _3e_));\r\n// { value: 4886718345n }\r\n\r\n// sample output for us to decode for second overload\r\nconst _4d_ = Uint8Array.fromHex(\"0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b68656c6c6f20776f726c64000000000000000000000000000000000000000000\".slice(2)).buffer;\r\nconst _54_ = abiJson[1];\r\nconst _1c_ = _655c97_(_54_, \"outputs\");\r\nconsole.log(decode(_4d_, _1c_));\r\n// { text: \"hello world\" }\r\n\r\n\r\n// using compiled modules from c880f7 would look like below\r\n// where 0b1577 is the contract name\r\n// and df639c is the overloaded function name\r\n// type signature will look like `_df639c_(includeSelector: boolean, overload: 0, a: bigint): ArrayBuffer (+1 overload)`\r\n\r\nconsole.log(bufferToHex(_0b1577_.encode._df639c_(true, 0, 0x123456789n)));\r\n// b1e56dfc0000000000000000000000000000000000000000000000000000000123456789\r\n\r\nconsole.log(bufferToHex(_0b1577_.encode._df639c_(false, 0, 0x123456789n)));\r\n// 0000000000000000000000000000000000000000000000000000000123456789\r\n\r\nconsole.log(bufferToHex(_0b1577_.encode._df639c_(true, 1, \"hello world\")));\r\n// cb7f477c0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b68656c6c6f20776f726c64000000000000000000000000000000000000000000\r\n\r\nconsole.log(bufferToHex(_0b1577_.encode._df639c_(false, 1, \"hello world\")));\r\n// 0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b68656c6c6f20776f726c64000000000000000000000000000000000000000000\r\n\r\nconsole.log(_0b1577_.decode._df639c_(0, _f4_));\r\n// { value: 4886718345n }\r\n\r\nconsole.log(_0b1577_.decode._df639c_(1, _4d_));\r\n// { text: \"hello world\" }\r\n```","readmeFilename":"README.md","_rev":"1-2ea36e26f80a8fc4c42ab9074a35fa83"}