viem 0.0.1-alpha.14 → 0.0.1-alpha.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. package/dist/chains.js +6 -5
  2. package/dist/chains.js.map +1 -0
  3. package/dist/chains.mjs +2 -1
  4. package/dist/chains.mjs.map +1 -0
  5. package/dist/chunk-4XREGFHD.js +153 -0
  6. package/dist/chunk-4XREGFHD.js.map +1 -0
  7. package/dist/{chunk-DUNJAMH5.mjs → chunk-B7A2CAHU.mjs} +95 -480
  8. package/dist/chunk-B7A2CAHU.mjs.map +1 -0
  9. package/dist/{chunk-6Z62LPKB.js → chunk-EWTLCB3N.js} +18 -6
  10. package/dist/chunk-EWTLCB3N.js.map +1 -0
  11. package/dist/chunk-KCMYVU3Z.mjs +153 -0
  12. package/dist/chunk-KCMYVU3Z.mjs.map +1 -0
  13. package/dist/{chunk-KB6CBNKW.mjs → chunk-KM6AFT2K.mjs} +18 -6
  14. package/dist/chunk-KM6AFT2K.mjs.map +1 -0
  15. package/dist/chunk-LQXQPPTU.js +256 -0
  16. package/dist/chunk-LQXQPPTU.js.map +1 -0
  17. package/dist/{chunk-5TCPFLFT.mjs → chunk-TSJ3OOJW.mjs} +2 -1
  18. package/dist/chunk-TSJ3OOJW.mjs.map +1 -0
  19. package/dist/chunk-U7QDLGQL.mjs +256 -0
  20. package/dist/chunk-U7QDLGQL.mjs.map +1 -0
  21. package/dist/{chunk-VUNR7KGG.js → chunk-WTXKCAG7.js} +146 -531
  22. package/dist/chunk-WTXKCAG7.js.map +1 -0
  23. package/dist/{chunk-E7IQYTLV.js → chunk-XJKOJIX3.js} +12 -11
  24. package/dist/chunk-XJKOJIX3.js.map +1 -0
  25. package/dist/clients/index.d.ts +6 -3
  26. package/dist/clients/index.js +4 -3
  27. package/dist/clients/index.js.map +1 -0
  28. package/dist/clients/index.mjs +3 -2
  29. package/dist/clients/index.mjs.map +1 -0
  30. package/dist/createClient-cd948138.d.ts +62 -0
  31. package/dist/createPublicClient-989a0556.d.ts +19 -0
  32. package/dist/createTestClient-81507f58.d.ts +34 -0
  33. package/dist/createWalletClient-43f801b9.d.ts +30 -0
  34. package/dist/{eip1193-c001fcd5.d.ts → eip1193-4330b722.d.ts} +1 -1
  35. package/dist/index.d.ts +13 -6
  36. package/dist/index.js +9 -4
  37. package/dist/index.js.map +1 -0
  38. package/dist/index.mjs +34 -29
  39. package/dist/index.mjs.map +1 -0
  40. package/dist/{parseGwei-21f98a29.d.ts → parseGwei-f2d23de6.d.ts} +1 -1
  41. package/dist/public.d.ts +12 -0
  42. package/dist/public.js +59 -0
  43. package/dist/public.js.map +1 -0
  44. package/dist/public.mjs +59 -0
  45. package/dist/public.mjs.map +1 -0
  46. package/dist/sendTransaction-7a9d241a.d.ts +13 -0
  47. package/dist/stopImpersonatingAccount-8113150e.d.ts +156 -0
  48. package/dist/test.d.ts +7 -0
  49. package/dist/test.js +60 -0
  50. package/dist/test.js.map +1 -0
  51. package/dist/test.mjs +60 -0
  52. package/dist/test.mjs.map +1 -0
  53. package/dist/{transactionRequest-1d4e4385.d.ts → transactionReceipt-5d332aab.d.ts} +4 -32
  54. package/dist/transactionRequest-327eb7c2.d.ts +33 -0
  55. package/dist/utils/index.d.ts +4 -3
  56. package/dist/utils/index.js +3 -2
  57. package/dist/utils/index.js.map +1 -0
  58. package/dist/utils/index.mjs +2 -1
  59. package/dist/utils/index.mjs.map +1 -0
  60. package/dist/wallet.d.ts +9 -0
  61. package/dist/wallet.js +24 -0
  62. package/dist/wallet.js.map +1 -0
  63. package/dist/wallet.mjs +24 -0
  64. package/dist/wallet.mjs.map +1 -0
  65. package/dist/watchAsset-0088384c.d.ts +39 -0
  66. package/dist/{stopImpersonatingAccount-fcc5a678.d.ts → watchPendingTransactions-670a7ca3.d.ts} +7 -197
  67. package/dist/{webSocket-3385e295.d.ts → webSocket-9a3b0b26.d.ts} +1 -1
  68. package/dist/window.d.ts +1 -1
  69. package/dist/window.js +1 -1
  70. package/dist/window.js.map +1 -0
  71. package/dist/window.mjs +1 -0
  72. package/dist/window.mjs.map +1 -0
  73. package/package.json +18 -6
  74. package/src/_test/abis.ts +1225 -0
  75. package/src/_test/bench.ts +15 -0
  76. package/src/_test/constants.ts +63 -0
  77. package/src/_test/globalSetup.ts +11 -0
  78. package/src/_test/index.ts +20 -0
  79. package/src/_test/setup.ts +8 -0
  80. package/src/_test/utils.ts +112 -0
  81. package/src/actions/index.test.ts +72 -0
  82. package/src/actions/index.ts +156 -0
  83. package/src/actions/public/call.bench.ts +48 -0
  84. package/src/actions/public/call.test.ts +99 -0
  85. package/src/actions/public/call.ts +96 -0
  86. package/src/actions/public/callContract.bench.ts +24 -0
  87. package/src/actions/public/callContract.test.ts +285 -0
  88. package/src/actions/public/callContract.ts +80 -0
  89. package/src/actions/public/createBlockFilter.bench.ts +11 -0
  90. package/src/actions/public/createBlockFilter.test.ts +9 -0
  91. package/src/actions/public/createBlockFilter.ts +14 -0
  92. package/src/actions/public/createEventFilter.test.ts +245 -0
  93. package/src/actions/public/createEventFilter.ts +81 -0
  94. package/src/actions/public/createPendingTransactionFilter.bench.ts +11 -0
  95. package/src/actions/public/createPendingTransactionFilter.test.ts +9 -0
  96. package/src/actions/public/createPendingTransactionFilter.ts +14 -0
  97. package/src/actions/public/deployContract.test.ts +56 -0
  98. package/src/actions/public/deployContract.ts +39 -0
  99. package/src/actions/public/estimateGas.bench.ts +46 -0
  100. package/src/actions/public/estimateGas.test.ts +92 -0
  101. package/src/actions/public/estimateGas.ts +61 -0
  102. package/src/actions/public/getBalance.test.ts +83 -0
  103. package/src/actions/public/getBalance.ts +37 -0
  104. package/src/actions/public/getBlock.bench.ts +28 -0
  105. package/src/actions/public/getBlock.test.ts +575 -0
  106. package/src/actions/public/getBlock.ts +66 -0
  107. package/src/actions/public/getBlockNumber.bench.ts +28 -0
  108. package/src/actions/public/getBlockNumber.test.ts +27 -0
  109. package/src/actions/public/getBlockNumber.ts +32 -0
  110. package/src/actions/public/getBlockTransactionCount.bench.ts +15 -0
  111. package/src/actions/public/getBlockTransactionCount.test.ts +57 -0
  112. package/src/actions/public/getBlockTransactionCount.ts +53 -0
  113. package/src/actions/public/getBytecode.test.ts +27 -0
  114. package/src/actions/public/getBytecode.ts +32 -0
  115. package/src/actions/public/getChainId.bench.ts +15 -0
  116. package/src/actions/public/getChainId.test.ts +8 -0
  117. package/src/actions/public/getChainId.ts +7 -0
  118. package/src/actions/public/getFeeHistory.bench.ts +18 -0
  119. package/src/actions/public/getFeeHistory.test.ts +137 -0
  120. package/src/actions/public/getFeeHistory.ts +44 -0
  121. package/src/actions/public/getFilterChanges.bench.ts +13 -0
  122. package/src/actions/public/getFilterChanges.test.ts +187 -0
  123. package/src/actions/public/getFilterChanges.ts +23 -0
  124. package/src/actions/public/getFilterLogs.test.ts +102 -0
  125. package/src/actions/public/getFilterLogs.ts +20 -0
  126. package/src/actions/public/getGasPrice.bench.ts +28 -0
  127. package/src/actions/public/getGasPrice.test.ts +8 -0
  128. package/src/actions/public/getGasPrice.ts +15 -0
  129. package/src/actions/public/getTransaction.bench.ts +33 -0
  130. package/src/actions/public/getTransaction.test.ts +311 -0
  131. package/src/actions/public/getTransaction.ts +96 -0
  132. package/src/actions/public/getTransactionConfirmations.test.ts +69 -0
  133. package/src/actions/public/getTransactionConfirmations.ts +39 -0
  134. package/src/actions/public/getTransactionCount.test.ts +56 -0
  135. package/src/actions/public/getTransactionCount.ts +34 -0
  136. package/src/actions/public/getTransactionReceipt.bench.ts +33 -0
  137. package/src/actions/public/getTransactionReceipt.test.ts +217 -0
  138. package/src/actions/public/getTransactionReceipt.ts +35 -0
  139. package/src/actions/public/index.test.ts +36 -0
  140. package/src/actions/public/index.ts +120 -0
  141. package/src/actions/public/uninstallFilter.bench.ts +13 -0
  142. package/src/actions/public/uninstallFilter.test.ts +65 -0
  143. package/src/actions/public/uninstallFilter.ts +17 -0
  144. package/src/actions/public/waitForTransactionReceipt.test.ts +322 -0
  145. package/src/actions/public/waitForTransactionReceipt.ts +171 -0
  146. package/src/actions/public/watchBlockNumber.test.ts +166 -0
  147. package/src/actions/public/watchBlockNumber.ts +79 -0
  148. package/src/actions/public/watchBlocks.test.ts +185 -0
  149. package/src/actions/public/watchBlocks.ts +95 -0
  150. package/src/actions/public/watchPendingTransactions.test.ts +116 -0
  151. package/src/actions/public/watchPendingTransactions.ts +73 -0
  152. package/src/actions/test/dropTransaction.test.ts +34 -0
  153. package/src/actions/test/dropTransaction.ts +17 -0
  154. package/src/actions/test/getAutomine.test.ts +14 -0
  155. package/src/actions/test/getAutomine.ts +11 -0
  156. package/src/actions/test/getTxpoolContent.test.ts +45 -0
  157. package/src/actions/test/getTxpoolContent.ts +7 -0
  158. package/src/actions/test/getTxpoolStatus.test.ts +41 -0
  159. package/src/actions/test/getTxpoolStatus.ts +12 -0
  160. package/src/actions/test/impersonateAccount.test.ts +28 -0
  161. package/src/actions/test/impersonateAccount.ts +17 -0
  162. package/src/actions/test/increaseTime.test.ts +18 -0
  163. package/src/actions/test/increaseTime.ts +17 -0
  164. package/src/actions/test/index.test.ts +38 -0
  165. package/src/actions/test/index.ts +77 -0
  166. package/src/actions/test/inspectTxpool.test.ts +50 -0
  167. package/src/actions/test/inspectTxpool.ts +7 -0
  168. package/src/actions/test/mine.test.ts +20 -0
  169. package/src/actions/test/mine.ts +16 -0
  170. package/src/actions/test/removeBlockTimestampInterval.test.ts +23 -0
  171. package/src/actions/test/removeBlockTimestampInterval.ts +7 -0
  172. package/src/actions/test/reset.test.ts +19 -0
  173. package/src/actions/test/reset.ts +18 -0
  174. package/src/actions/test/revert.test.ts +39 -0
  175. package/src/actions/test/revert.ts +14 -0
  176. package/src/actions/test/sendUnsignedTransaction.test.ts +52 -0
  177. package/src/actions/test/sendUnsignedTransaction.ts +19 -0
  178. package/src/actions/test/setAutomine.test.ts +14 -0
  179. package/src/actions/test/setAutomine.ts +8 -0
  180. package/src/actions/test/setBalance.test.ts +29 -0
  181. package/src/actions/test/setBalance.ts +20 -0
  182. package/src/actions/test/setBlockGasLimit.test.ts +21 -0
  183. package/src/actions/test/setBlockGasLimit.ts +17 -0
  184. package/src/actions/test/setBlockTimestampInterval.test.ts +23 -0
  185. package/src/actions/test/setBlockTimestampInterval.ts +16 -0
  186. package/src/actions/test/setCode.test.ts +26 -0
  187. package/src/actions/test/setCode.ts +19 -0
  188. package/src/actions/test/setCoinbase.test.ts +11 -0
  189. package/src/actions/test/setCoinbase.ts +17 -0
  190. package/src/actions/test/setIntervalMining.test.ts +30 -0
  191. package/src/actions/test/setIntervalMining.ts +16 -0
  192. package/src/actions/test/setLoggingEnabled.test.ts +10 -0
  193. package/src/actions/test/setLoggingEnabled.ts +8 -0
  194. package/src/actions/test/setMinGasPrice.test.ts +22 -0
  195. package/src/actions/test/setMinGasPrice.ts +17 -0
  196. package/src/actions/test/setNextBlockBaseFeePerGas.test.ts +23 -0
  197. package/src/actions/test/setNextBlockBaseFeePerGas.ts +17 -0
  198. package/src/actions/test/setNextBlockTimestamp.test.ts +19 -0
  199. package/src/actions/test/setNextBlockTimestamp.ts +17 -0
  200. package/src/actions/test/setNonce.test.ts +28 -0
  201. package/src/actions/test/setNonce.ts +20 -0
  202. package/src/actions/test/setRpcUrl.test.ts +9 -0
  203. package/src/actions/test/setRpcUrl.ts +8 -0
  204. package/src/actions/test/setStorageAt.test.ts +36 -0
  205. package/src/actions/test/setStorageAt.ts +26 -0
  206. package/src/actions/test/snapshot.test.ts +18 -0
  207. package/src/actions/test/snapshot.ts +7 -0
  208. package/src/actions/test/stopImpersonatingAccount.test.ts +31 -0
  209. package/src/actions/test/stopImpersonatingAccount.ts +17 -0
  210. package/src/actions/wallet/addChain.test.ts +14 -0
  211. package/src/actions/wallet/addChain.ts +21 -0
  212. package/src/actions/wallet/getAccounts.test.ts +22 -0
  213. package/src/actions/wallet/getAccounts.ts +7 -0
  214. package/src/actions/wallet/getPermissions.test.ts +24 -0
  215. package/src/actions/wallet/getPermissions.ts +9 -0
  216. package/src/actions/wallet/index.test.ts +19 -0
  217. package/src/actions/wallet/index.ts +27 -0
  218. package/src/actions/wallet/requestAccounts.test.ts +13 -0
  219. package/src/actions/wallet/requestAccounts.ts +7 -0
  220. package/src/actions/wallet/requestPermissions.test.ts +26 -0
  221. package/src/actions/wallet/requestPermissions.ts +19 -0
  222. package/src/actions/wallet/sendTransaction.bench.ts +57 -0
  223. package/src/actions/wallet/sendTransaction.test.ts +440 -0
  224. package/src/actions/wallet/sendTransaction.ts +76 -0
  225. package/src/actions/wallet/signMessage.test.ts +62 -0
  226. package/src/actions/wallet/signMessage.ts +35 -0
  227. package/src/actions/wallet/switchChain.test.ts +22 -0
  228. package/src/actions/wallet/switchChain.ts +19 -0
  229. package/src/actions/wallet/watchAsset.test.ts +41 -0
  230. package/src/actions/wallet/watchAsset.ts +16 -0
  231. package/src/chains.test.ts +1134 -0
  232. package/src/chains.ts +167 -0
  233. package/src/clients/createClient.test.ts +295 -0
  234. package/src/clients/createClient.ts +81 -0
  235. package/src/clients/createPublicClient.test.ts +165 -0
  236. package/src/clients/createPublicClient.ts +49 -0
  237. package/src/clients/createTestClient.test.ts +145 -0
  238. package/src/clients/createTestClient.ts +72 -0
  239. package/src/clients/createWalletClient.test.ts +121 -0
  240. package/src/clients/createWalletClient.ts +54 -0
  241. package/src/clients/index.test.ts +19 -0
  242. package/src/clients/index.ts +31 -0
  243. package/src/clients/transports/createTransport.test.ts +58 -0
  244. package/src/clients/transports/createTransport.ts +48 -0
  245. package/src/clients/transports/custom.test.ts +98 -0
  246. package/src/clients/transports/custom.ts +34 -0
  247. package/src/clients/transports/fallback.test.ts +223 -0
  248. package/src/clients/transports/fallback.ts +48 -0
  249. package/src/clients/transports/http.test.ts +110 -0
  250. package/src/clients/transports/http.ts +51 -0
  251. package/src/clients/transports/index.test.ts +15 -0
  252. package/src/clients/transports/index.ts +17 -0
  253. package/src/clients/transports/webSocket.test.ts +164 -0
  254. package/src/clients/transports/webSocket.ts +117 -0
  255. package/src/constants.test.ts +27 -0
  256. package/src/constants.ts +18 -0
  257. package/src/errors/abi.test.ts +83 -0
  258. package/src/errors/abi.ts +238 -0
  259. package/src/errors/address.test.ts +14 -0
  260. package/src/errors/address.ts +9 -0
  261. package/src/errors/base.test.ts +72 -0
  262. package/src/errors/base.ts +57 -0
  263. package/src/errors/block.test.ts +24 -0
  264. package/src/errors/block.ts +18 -0
  265. package/src/errors/contract.ts +125 -0
  266. package/src/errors/data.ts +20 -0
  267. package/src/errors/encoding.ts +60 -0
  268. package/src/errors/index.ts +77 -0
  269. package/src/errors/log.ts +8 -0
  270. package/src/errors/request.test.ts +331 -0
  271. package/src/errors/request.ts +163 -0
  272. package/src/errors/rpc.test.ts +88 -0
  273. package/src/errors/rpc.ts +113 -0
  274. package/src/errors/transaction.test.ts +83 -0
  275. package/src/errors/transaction.ts +54 -0
  276. package/src/errors/transport.test.ts +12 -0
  277. package/src/errors/transport.ts +12 -0
  278. package/src/index.test.ts +208 -0
  279. package/src/index.ts +353 -0
  280. package/src/public.ts +80 -0
  281. package/src/test.ts +51 -0
  282. package/src/types/block.ts +71 -0
  283. package/src/types/contract.ts +327 -0
  284. package/src/types/eip1193.ts +1038 -0
  285. package/src/types/fee.ts +47 -0
  286. package/src/types/filter.ts +8 -0
  287. package/src/types/index.ts +72 -0
  288. package/src/types/log.ts +22 -0
  289. package/src/types/misc.ts +4 -0
  290. package/src/types/rpc.ts +35 -0
  291. package/src/types/transaction.ts +145 -0
  292. package/src/types/utils.ts +67 -0
  293. package/src/types/window.ts +9 -0
  294. package/src/utils/abi/decodeAbi.bench.ts +135 -0
  295. package/src/utils/abi/decodeAbi.test.ts +1615 -0
  296. package/src/utils/abi/decodeAbi.ts +296 -0
  297. package/src/utils/abi/decodeDeployData.test.ts +159 -0
  298. package/src/utils/abi/decodeDeployData.ts +41 -0
  299. package/src/utils/abi/decodeErrorResult.test.ts +130 -0
  300. package/src/utils/abi/decodeErrorResult.ts +28 -0
  301. package/src/utils/abi/decodeFunctionData.test.ts +140 -0
  302. package/src/utils/abi/decodeFunctionData.ts +29 -0
  303. package/src/utils/abi/decodeFunctionResult.test.ts +262 -0
  304. package/src/utils/abi/decodeFunctionResult.ts +53 -0
  305. package/src/utils/abi/encodeAbi.bench.ts +163 -0
  306. package/src/utils/abi/encodeAbi.test.ts +1414 -0
  307. package/src/utils/abi/encodeAbi.ts +258 -0
  308. package/src/utils/abi/encodeDeployData.test.ts +131 -0
  309. package/src/utils/abi/encodeDeployData.ts +37 -0
  310. package/src/utils/abi/encodeErrorResult.test.ts +197 -0
  311. package/src/utils/abi/encodeErrorResult.ts +40 -0
  312. package/src/utils/abi/encodeEventTopics.test.ts +348 -0
  313. package/src/utils/abi/encodeEventTopics.ts +69 -0
  314. package/src/utils/abi/encodeFunctionData.test.ts +140 -0
  315. package/src/utils/abi/encodeFunctionData.ts +38 -0
  316. package/src/utils/abi/encodeFunctionResult.test.ts +284 -0
  317. package/src/utils/abi/encodeFunctionResult.ts +39 -0
  318. package/src/utils/abi/formatAbiItemWithArgs.test.ts +291 -0
  319. package/src/utils/abi/formatAbiItemWithArgs.ts +27 -0
  320. package/src/utils/abi/formatAbiItemWithParams.test.ts +335 -0
  321. package/src/utils/abi/formatAbiItemWithParams.ts +41 -0
  322. package/src/utils/abi/getAbiItem.ts +5 -0
  323. package/src/utils/abi/index.test.ts +23 -0
  324. package/src/utils/abi/index.ts +38 -0
  325. package/src/utils/address/getAddress.bench.ts +22 -0
  326. package/src/utils/address/getAddress.test.ts +46 -0
  327. package/src/utils/address/getAddress.ts +28 -0
  328. package/src/utils/address/getContractAddress.bench.ts +20 -0
  329. package/src/utils/address/getContractAddress.test.ts +78 -0
  330. package/src/utils/address/getContractAddress.ts +59 -0
  331. package/src/utils/address/index.test.ts +17 -0
  332. package/src/utils/address/index.ts +16 -0
  333. package/src/utils/address/isAddress.test.ts +10 -0
  334. package/src/utils/address/isAddress.ts +10 -0
  335. package/src/utils/address/isAddressEqual.test.ts +55 -0
  336. package/src/utils/address/isAddressEqual.ts +6 -0
  337. package/src/utils/buildRequest.test.ts +365 -0
  338. package/src/utils/buildRequest.ts +45 -0
  339. package/src/utils/contract/extractFunctionParts.test.ts +109 -0
  340. package/src/utils/contract/extractFunctionParts.ts +27 -0
  341. package/src/utils/contract/getContractError.test.ts +97 -0
  342. package/src/utils/contract/getContractError.ts +70 -0
  343. package/src/utils/contract/index.test.ts +15 -0
  344. package/src/utils/contract/index.ts +8 -0
  345. package/src/utils/data/concat.test.ts +35 -0
  346. package/src/utils/data/concat.ts +34 -0
  347. package/src/utils/data/index.test.ts +23 -0
  348. package/src/utils/data/index.ts +13 -0
  349. package/src/utils/data/isBytes.test.ts +9 -0
  350. package/src/utils/data/isBytes.ts +7 -0
  351. package/src/utils/data/isHex.test.ts +13 -0
  352. package/src/utils/data/isHex.ts +5 -0
  353. package/src/utils/data/pad.bench.ts +39 -0
  354. package/src/utils/data/pad.test.ts +367 -0
  355. package/src/utils/data/pad.ts +53 -0
  356. package/src/utils/data/size.test.ts +18 -0
  357. package/src/utils/data/size.ts +13 -0
  358. package/src/utils/data/slice.test.ts +203 -0
  359. package/src/utils/data/slice.ts +60 -0
  360. package/src/utils/data/trim.bench.ts +50 -0
  361. package/src/utils/data/trim.test.ts +175 -0
  362. package/src/utils/data/trim.ts +33 -0
  363. package/src/utils/encoding/decodeBytes.bench.ts +40 -0
  364. package/src/utils/encoding/decodeBytes.test.ts +144 -0
  365. package/src/utils/encoding/decodeBytes.ts +63 -0
  366. package/src/utils/encoding/decodeHex.bench.ts +24 -0
  367. package/src/utils/encoding/decodeHex.test.ts +167 -0
  368. package/src/utils/encoding/decodeHex.ts +76 -0
  369. package/src/utils/encoding/decodeRlp.bench.ts +34 -0
  370. package/src/utils/encoding/decodeRlp.test.ts +350 -0
  371. package/src/utils/encoding/decodeRlp.ts +121 -0
  372. package/src/utils/encoding/encodeBytes.bench.ts +41 -0
  373. package/src/utils/encoding/encodeBytes.test.ts +676 -0
  374. package/src/utils/encoding/encodeBytes.ts +59 -0
  375. package/src/utils/encoding/encodeHex.bench.ts +60 -0
  376. package/src/utils/encoding/encodeHex.test.ts +232 -0
  377. package/src/utils/encoding/encodeHex.ts +104 -0
  378. package/src/utils/encoding/encodeRlp.bench.ts +54 -0
  379. package/src/utils/encoding/encodeRlp.test.ts +254 -0
  380. package/src/utils/encoding/encodeRlp.ts +48 -0
  381. package/src/utils/encoding/index.test.ts +32 -0
  382. package/src/utils/encoding/index.ts +36 -0
  383. package/src/utils/formatters/block.bench.ts +51 -0
  384. package/src/utils/formatters/block.test.ts +115 -0
  385. package/src/utils/formatters/block.ts +36 -0
  386. package/src/utils/formatters/extract.test.ts +14 -0
  387. package/src/utils/formatters/extract.ts +18 -0
  388. package/src/utils/formatters/feeHistory.test.ts +66 -0
  389. package/src/utils/formatters/feeHistory.ts +12 -0
  390. package/src/utils/formatters/format.test.ts +93 -0
  391. package/src/utils/formatters/format.ts +53 -0
  392. package/src/utils/formatters/index.test.ts +17 -0
  393. package/src/utils/formatters/index.ts +24 -0
  394. package/src/utils/formatters/log.test.ts +79 -0
  395. package/src/utils/formatters/log.ts +12 -0
  396. package/src/utils/formatters/transaction.test.ts +271 -0
  397. package/src/utils/formatters/transaction.ts +51 -0
  398. package/src/utils/formatters/transactionReceipt.bench.ts +73 -0
  399. package/src/utils/formatters/transactionReceipt.test.ts +151 -0
  400. package/src/utils/formatters/transactionReceipt.ts +54 -0
  401. package/src/utils/formatters/transactionRequest.bench.ts +29 -0
  402. package/src/utils/formatters/transactionRequest.test.ts +237 -0
  403. package/src/utils/formatters/transactionRequest.ts +47 -0
  404. package/src/utils/hash/getEventSignature.test.ts +61 -0
  405. package/src/utils/hash/getEventSignature.ts +4 -0
  406. package/src/utils/hash/getFunctionSignature.test.ts +22 -0
  407. package/src/utils/hash/getFunctionSignature.ts +5 -0
  408. package/src/utils/hash/hashFunction.test.ts +65 -0
  409. package/src/utils/hash/hashFunction.ts +12 -0
  410. package/src/utils/hash/index.test.ts +13 -0
  411. package/src/utils/hash/index.ts +5 -0
  412. package/src/utils/hash/keccak256.test.ts +59 -0
  413. package/src/utils/hash/keccak256.ts +23 -0
  414. package/src/utils/index.test.ts +87 -0
  415. package/src/utils/index.ts +126 -0
  416. package/src/utils/observe.test.ts +176 -0
  417. package/src/utils/observe.ts +66 -0
  418. package/src/utils/poll.test.ts +127 -0
  419. package/src/utils/poll.ts +42 -0
  420. package/src/utils/promise/index.test.ts +14 -0
  421. package/src/utils/promise/index.ts +3 -0
  422. package/src/utils/promise/withCache.test.ts +97 -0
  423. package/src/utils/promise/withCache.ts +73 -0
  424. package/src/utils/promise/withRetry.test.ts +231 -0
  425. package/src/utils/promise/withRetry.ts +61 -0
  426. package/src/utils/promise/withTimeout.test.ts +37 -0
  427. package/src/utils/promise/withTimeout.ts +39 -0
  428. package/src/utils/rpc.test.ts +992 -0
  429. package/src/utils/rpc.ts +292 -0
  430. package/src/utils/stringify.test.ts +13 -0
  431. package/src/utils/stringify.ts +5 -0
  432. package/src/utils/uid.ts +14 -0
  433. package/src/utils/unit/formatEther.test.ts +75 -0
  434. package/src/utils/unit/formatEther.ts +6 -0
  435. package/src/utils/unit/formatGwei.test.ts +32 -0
  436. package/src/utils/unit/formatGwei.ts +6 -0
  437. package/src/utils/unit/formatUnit.bench.ts +26 -0
  438. package/src/utils/unit/formatUnit.test.ts +40 -0
  439. package/src/utils/unit/formatUnit.ts +16 -0
  440. package/src/utils/unit/index.test.ts +16 -0
  441. package/src/utils/unit/index.ts +6 -0
  442. package/src/utils/unit/parseEther.test.ts +126 -0
  443. package/src/utils/unit/parseEther.ts +6 -0
  444. package/src/utils/unit/parseGwei.test.ts +50 -0
  445. package/src/utils/unit/parseGwei.ts +6 -0
  446. package/src/utils/unit/parseUnit.bench.ts +26 -0
  447. package/src/utils/unit/parseUnit.test.ts +54 -0
  448. package/src/utils/unit/parseUnit.ts +27 -0
  449. package/src/utils/wait.ts +3 -0
  450. package/src/wallet.ts +23 -0
  451. package/src/window.ts +1 -0
  452. package/actions/package.json +0 -4
  453. package/dist/actions/index.d.ts +0 -8
  454. package/dist/actions/index.js +0 -129
  455. package/dist/actions/index.mjs +0 -129
  456. package/dist/createWalletClient-3f9fa8b6.d.ts +0 -130
@@ -0,0 +1,117 @@
1
+ import { UrlRequiredError } from '../../errors'
2
+ import type { Hash } from '../../types'
3
+ import type { RpcResponse } from '../../utils/rpc'
4
+ import { getSocket, rpc } from '../../utils/rpc'
5
+ import type { Transport, TransportConfig } from './createTransport'
6
+ import { createTransport } from './createTransport'
7
+
8
+ type WebSocketTransportSubscribeArgs = {
9
+ onData: (data: RpcResponse) => void
10
+ onError?: (error: any) => void
11
+ }
12
+
13
+ type WebSocketTransportSubscribeResponse = {
14
+ subscriptionId: Hash
15
+ unsubscribe: () => Promise<RpcResponse<boolean>>
16
+ }
17
+
18
+ type WebSocketTransportSubscribe = {
19
+ subscribe(
20
+ args: WebSocketTransportSubscribeArgs & {
21
+ /**
22
+ * @description Add information about compiled contracts
23
+ * @link https://hardhat.org/hardhat-network/docs/reference#hardhat_addcompilationresult
24
+ */
25
+ params: ['newHeads']
26
+ },
27
+ ): Promise<WebSocketTransportSubscribeResponse>
28
+ }
29
+
30
+ export type WebSocketTransportConfig = {
31
+ /** The key of the WebSocket transport. */
32
+ key?: TransportConfig['key']
33
+ /** The name of the WebSocket transport. */
34
+ name?: TransportConfig['name']
35
+ }
36
+
37
+ export type WebSocketTransport = Transport<
38
+ 'webSocket',
39
+ {
40
+ getSocket(): Promise<WebSocket>
41
+ subscribe: WebSocketTransportSubscribe['subscribe']
42
+ }
43
+ >
44
+
45
+ /**
46
+ * @description Creates a WebSocket transport that connects to a JSON-RPC API.
47
+ */
48
+ export function webSocket(
49
+ /** URL of the JSON-RPC API. Defaults to the chain's public RPC URL. */
50
+ url?: string,
51
+ {
52
+ key = 'webSocket',
53
+ name = 'WebSocket JSON-RPC',
54
+ }: WebSocketTransportConfig = {},
55
+ ): WebSocketTransport {
56
+ return ({ chain }) => {
57
+ const url_ = url || chain?.rpcUrls.default.webSocket?.[0]
58
+ if (!url_) throw new UrlRequiredError()
59
+ return createTransport(
60
+ {
61
+ key,
62
+ name,
63
+ async request({ method, params }) {
64
+ const socket = await getSocket(url_)
65
+ const { result } = await rpc.webSocketAsync(socket, {
66
+ body: { method, params },
67
+ })
68
+ return result
69
+ },
70
+ type: 'webSocket',
71
+ },
72
+ {
73
+ getSocket() {
74
+ return getSocket(url_)
75
+ },
76
+ async subscribe({ params, onData, onError }: any) {
77
+ const socket = await getSocket(url_)
78
+ const { result: subscriptionId } = await new Promise<any>(
79
+ (resolve, reject) =>
80
+ rpc.webSocket(socket, {
81
+ body: {
82
+ method: 'eth_subscribe',
83
+ params,
84
+ },
85
+ onData: (data) => {
86
+ if (typeof data.id === 'number') {
87
+ resolve(data)
88
+ return
89
+ }
90
+ onData(data)
91
+ },
92
+ onError: (error) => {
93
+ reject(error)
94
+ onError?.(error)
95
+ },
96
+ }),
97
+ )
98
+ return {
99
+ subscriptionId,
100
+ async unsubscribe() {
101
+ return new Promise<any>((resolve, reject) =>
102
+ rpc.webSocket(socket, {
103
+ body: {
104
+ method: 'eth_unsubscribe',
105
+ params: [subscriptionId],
106
+ },
107
+ onData: resolve,
108
+ onError: reject,
109
+ }),
110
+ )
111
+ },
112
+ }
113
+ },
114
+ },
115
+ )
116
+ }
117
+ }
@@ -0,0 +1,27 @@
1
+ import { expect, test } from 'vitest'
2
+
3
+ import * as constants from './constants'
4
+
5
+ test('exports constants', () => {
6
+ expect(constants).toMatchInlineSnapshot(`
7
+ {
8
+ "etherUnits": {
9
+ "gwei": 9,
10
+ "wei": 18,
11
+ },
12
+ "gweiUnits": {
13
+ "ether": -9,
14
+ "wei": 9,
15
+ },
16
+ "transactionType": {
17
+ "0x0": "legacy",
18
+ "0x1": "eip2930",
19
+ "0x2": "eip1559",
20
+ },
21
+ "weiUnits": {
22
+ "ether": -18,
23
+ "gwei": -9,
24
+ },
25
+ }
26
+ `)
27
+ })
@@ -0,0 +1,18 @@
1
+ export const etherUnits = {
2
+ gwei: 9,
3
+ wei: 18,
4
+ }
5
+ export const gweiUnits = {
6
+ ether: -9,
7
+ wei: 9,
8
+ }
9
+ export const weiUnits = {
10
+ ether: -18,
11
+ gwei: -9,
12
+ }
13
+
14
+ export const transactionType = {
15
+ '0x0': 'legacy',
16
+ '0x1': 'eip2930',
17
+ '0x2': 'eip1559',
18
+ } as const
@@ -0,0 +1,83 @@
1
+ import { expect, test } from 'vitest'
2
+ import {
3
+ AbiDecodingDataSizeInvalidError,
4
+ AbiEncodingArrayLengthMismatchError,
5
+ AbiEncodingLengthMismatchError,
6
+ InvalidAbiDecodingTypeError,
7
+ InvalidAbiEncodingTypeError,
8
+ InvalidArrayError,
9
+ } from './abi'
10
+
11
+ test('AbiDecodingDataSizeInvalidError', () => {
12
+ expect(new AbiDecodingDataSizeInvalidError(69)).toMatchInlineSnapshot(`
13
+ [AbiDecodingDataSizeInvalidError: Data size of 69 bytes is invalid.
14
+ Size must be in increments of 32 bytes (size % 32 === 0).
15
+
16
+ Version: viem@1.0.2]
17
+ `)
18
+ })
19
+
20
+ test('InvalidAbiDecodingTypeError', () => {
21
+ expect(
22
+ new InvalidAbiDecodingTypeError('lol', { docsPath: '/lol' }),
23
+ ).toMatchInlineSnapshot(`
24
+ [InvalidAbiDecodingType: Type "lol" is not a valid decoding type.
25
+ Please provide a valid ABI type.
26
+
27
+ Docs: https://viem.sh/lol
28
+
29
+ Version: viem@1.0.2]
30
+ `)
31
+ })
32
+
33
+ test('AbiEncodingArrayLengthMismatchError', () => {
34
+ expect(
35
+ new AbiEncodingArrayLengthMismatchError({
36
+ expectedLength: 69,
37
+ givenLength: 420,
38
+ type: 'uint256[3]',
39
+ }),
40
+ ).toMatchInlineSnapshot(`
41
+ [AbiEncodingArrayLengthMismatchError: ABI encoding array length mismatch for type uint256[3].
42
+ Expected length: 69
43
+ Given length: 420
44
+
45
+ Version: viem@1.0.2]
46
+ `)
47
+ })
48
+
49
+ test('AbiEncodingLengthMismatchError', () => {
50
+ expect(
51
+ new AbiEncodingLengthMismatchError({
52
+ expectedLength: 69,
53
+ givenLength: 420,
54
+ }),
55
+ ).toMatchInlineSnapshot(`
56
+ [AbiEncodingLengthMismatchError: ABI encoding params/values length mismatch.
57
+ Expected length (params): 69
58
+ Given length (values): 420
59
+
60
+ Version: viem@1.0.2]
61
+ `)
62
+ })
63
+
64
+ test('InvalidAbiEncodingTypeError', () => {
65
+ expect(
66
+ new InvalidAbiEncodingTypeError('lol', { docsPath: '/lol' }),
67
+ ).toMatchInlineSnapshot(`
68
+ [InvalidAbiEncodingType: Type "lol" is not a valid encoding type.
69
+ Please provide a valid ABI type.
70
+
71
+ Docs: https://viem.sh/lol
72
+
73
+ Version: viem@1.0.2]
74
+ `)
75
+ })
76
+
77
+ test('InvalidArrayError', () => {
78
+ expect(new InvalidArrayError('lol')).toMatchInlineSnapshot(`
79
+ [InvalidArrayError: Value "lol" is not a valid array.
80
+
81
+ Version: viem@1.0.2]
82
+ `)
83
+ })
@@ -0,0 +1,238 @@
1
+ import { Hex } from '../types'
2
+ import { BaseError } from './base'
3
+
4
+ export class AbiConstructorNotFoundError extends BaseError {
5
+ name = 'AbiConstructorNotFoundError'
6
+ constructor({ docsPath }: { docsPath: string }) {
7
+ super(
8
+ [
9
+ 'A constructor was not found on the ABI.',
10
+ 'Make sure you are using the correct ABI and that the constructor exists on it.',
11
+ ].join('\n'),
12
+ {
13
+ docsPath,
14
+ },
15
+ )
16
+ }
17
+ }
18
+
19
+ export class AbiConstructorParamsNotFoundError extends BaseError {
20
+ name = 'AbiConstructorParamsNotFoundError'
21
+ constructor({ docsPath }: { docsPath: string }) {
22
+ super(
23
+ [
24
+ 'Constructor arguments were provided (`args`), but a constructor parameters (`inputs`) were not found on the ABI.',
25
+ 'Make sure you are using the correct ABI, and that the `inputs` attribute on the constructor exists.',
26
+ ].join('\n'),
27
+ {
28
+ docsPath,
29
+ },
30
+ )
31
+ }
32
+ }
33
+
34
+ export class AbiDecodingDataSizeInvalidError extends BaseError {
35
+ name = 'AbiDecodingDataSizeInvalidError'
36
+ constructor(size: number) {
37
+ super(
38
+ [
39
+ `Data size of ${size} bytes is invalid.`,
40
+ 'Size must be in increments of 32 bytes (size % 32 === 0).',
41
+ ].join('\n'),
42
+ )
43
+ }
44
+ }
45
+
46
+ export class AbiDecodingZeroDataError extends BaseError {
47
+ name = 'AbiDecodingZeroDataError'
48
+ constructor() {
49
+ super('Cannot decode zero data ("0x") with ABI parameters.')
50
+ }
51
+ }
52
+
53
+ export class AbiEncodingArrayLengthMismatchError extends BaseError {
54
+ name = 'AbiEncodingArrayLengthMismatchError'
55
+ constructor({
56
+ expectedLength,
57
+ givenLength,
58
+ type,
59
+ }: { expectedLength: number; givenLength: number; type: string }) {
60
+ super(
61
+ [
62
+ `ABI encoding array length mismatch for type ${type}.`,
63
+ `Expected length: ${expectedLength}`,
64
+ `Given length: ${givenLength}`,
65
+ ].join('\n'),
66
+ )
67
+ }
68
+ }
69
+
70
+ export class AbiEncodingLengthMismatchError extends BaseError {
71
+ name = 'AbiEncodingLengthMismatchError'
72
+ constructor({
73
+ expectedLength,
74
+ givenLength,
75
+ }: { expectedLength: number; givenLength: number }) {
76
+ super(
77
+ [
78
+ 'ABI encoding params/values length mismatch.',
79
+ `Expected length (params): ${expectedLength}`,
80
+ `Given length (values): ${givenLength}`,
81
+ ].join('\n'),
82
+ )
83
+ }
84
+ }
85
+
86
+ export class AbiErrorInputsNotFoundError extends BaseError {
87
+ name = 'AbiErrorInputsNotFoundError'
88
+ constructor(errorName: string, { docsPath }: { docsPath: string }) {
89
+ super(
90
+ [
91
+ `Arguments (\`args\`) were provided to "${errorName}", but "${errorName}" on the ABI does not contain any parameters (\`inputs\`).`,
92
+ 'Cannot encode error result without knowing what the parameter types are.',
93
+ 'Make sure you are using the correct ABI and that the inputs exist on it.',
94
+ ].join('\n'),
95
+ {
96
+ docsPath,
97
+ },
98
+ )
99
+ }
100
+ }
101
+
102
+ export class AbiErrorNotFoundError extends BaseError {
103
+ name = 'AbiErrorNotFoundError'
104
+ constructor(errorName: string, { docsPath }: { docsPath: string }) {
105
+ super(
106
+ [
107
+ `Error "${errorName}" not found on ABI.`,
108
+ 'Make sure you are using the correct ABI and that the error exists on it.',
109
+ ].join('\n'),
110
+ {
111
+ docsPath,
112
+ },
113
+ )
114
+ }
115
+ }
116
+
117
+ export class AbiErrorSignatureNotFoundError extends BaseError {
118
+ name = 'AbiErrorSignatureNotFoundError'
119
+ constructor(signature: Hex, { docsPath }: { docsPath: string }) {
120
+ super(
121
+ [
122
+ `Encoded error signature "${signature}" not found on ABI.`,
123
+ 'Make sure you are using the correct ABI and that the error exists on it.',
124
+ `You can look up the signature "${signature}" here: https://sig.eth.samczsun.com/.`,
125
+ ].join('\n'),
126
+ {
127
+ docsPath,
128
+ },
129
+ )
130
+ }
131
+ }
132
+
133
+ export class AbiEventNotFoundError extends BaseError {
134
+ name = 'AbiEventNotFoundError'
135
+ constructor(eventName: string, { docsPath }: { docsPath: string }) {
136
+ super(
137
+ [
138
+ `Event "${eventName}" not found on ABI.`,
139
+ 'Make sure you are using the correct ABI and that the event exists on it.',
140
+ ].join('\n'),
141
+ {
142
+ docsPath,
143
+ },
144
+ )
145
+ }
146
+ }
147
+
148
+ export class AbiFunctionNotFoundError extends BaseError {
149
+ name = 'AbiFunctionNotFoundError'
150
+ constructor(functionName: string, { docsPath }: { docsPath: string }) {
151
+ super(
152
+ [
153
+ `Function "${functionName}" not found on ABI.`,
154
+ 'Make sure you are using the correct ABI and that the function exists on it.',
155
+ ].join('\n'),
156
+ {
157
+ docsPath,
158
+ },
159
+ )
160
+ }
161
+ }
162
+
163
+ export class AbiFunctionOutputsNotFoundError extends BaseError {
164
+ name = 'AbiFunctionOutputsNotFoundError'
165
+ constructor(functionName: string, { docsPath }: { docsPath: string }) {
166
+ super(
167
+ [
168
+ `Function "${functionName}" does not contain any \`outputs\` on ABI.`,
169
+ 'Cannot decode function result without knowing what the parameter types are.',
170
+ 'Make sure you are using the correct ABI and that the function exists on it.',
171
+ ].join('\n'),
172
+ {
173
+ docsPath,
174
+ },
175
+ )
176
+ }
177
+ }
178
+
179
+ export class AbiFunctionSignatureNotFoundError extends BaseError {
180
+ name = 'AbiFunctionSignatureNotFoundError'
181
+ constructor(signature: Hex, { docsPath }: { docsPath: string }) {
182
+ super(
183
+ [
184
+ `Encoded function signature "${signature}" not found on ABI.`,
185
+ 'Make sure you are using the correct ABI and that the function exists on it.',
186
+ `You can look up the signature "${signature}" here: https://sig.eth.samczsun.com/.`,
187
+ ].join('\n'),
188
+ {
189
+ docsPath,
190
+ },
191
+ )
192
+ }
193
+ }
194
+
195
+ export class InvalidAbiEncodingTypeError extends BaseError {
196
+ name = 'InvalidAbiEncodingType'
197
+ constructor(type: string, { docsPath }: { docsPath: string }) {
198
+ super(
199
+ [
200
+ `Type "${type}" is not a valid encoding type.`,
201
+ 'Please provide a valid ABI type.',
202
+ ].join('\n'),
203
+ { docsPath },
204
+ )
205
+ }
206
+ }
207
+
208
+ export class InvalidAbiDecodingTypeError extends BaseError {
209
+ name = 'InvalidAbiDecodingType'
210
+ constructor(type: string, { docsPath }: { docsPath: string }) {
211
+ super(
212
+ [
213
+ `Type "${type}" is not a valid decoding type.`,
214
+ 'Please provide a valid ABI type.',
215
+ ].join('\n'),
216
+ { docsPath },
217
+ )
218
+ }
219
+ }
220
+
221
+ export class InvalidArrayError extends BaseError {
222
+ name = 'InvalidArrayError'
223
+ constructor(value: unknown) {
224
+ super([`Value "${value}" is not a valid array.`].join('\n'))
225
+ }
226
+ }
227
+
228
+ export class InvalidDefinitionTypeError extends BaseError {
229
+ name = 'InvalidDefinitionTypeError'
230
+ constructor(type: string) {
231
+ super(
232
+ [
233
+ `"${type}" is not a valid definition type.`,
234
+ 'Valid types: "function", "event", "error"',
235
+ ].join('\n'),
236
+ )
237
+ }
238
+ }
@@ -0,0 +1,14 @@
1
+ import { expect, test } from 'vitest'
2
+ import { InvalidAddressError } from './address'
3
+
4
+ test('InvalidAddressError', () => {
5
+ expect(
6
+ new InvalidAddressError({
7
+ address: '0xa5cc3c03994db5b0d9a5eEdD10Cabab0813678az',
8
+ }),
9
+ ).toMatchInlineSnapshot(`
10
+ [InvalidAddressError: Address "0xa5cc3c03994db5b0d9a5eEdD10Cabab0813678az" is invalid.
11
+
12
+ Version: viem@1.0.2]
13
+ `)
14
+ })
@@ -0,0 +1,9 @@
1
+ import { Address } from '../types'
2
+ import { BaseError } from './base'
3
+
4
+ export class InvalidAddressError extends BaseError {
5
+ name = 'InvalidAddressError'
6
+ constructor({ address }: { address: Address }) {
7
+ super(`Address "${address}" is invalid.`)
8
+ }
9
+ }
@@ -0,0 +1,72 @@
1
+ import { expect, test } from 'vitest'
2
+
3
+ import { BaseError } from './base'
4
+
5
+ test('BaseError', () => {
6
+ expect(new BaseError('An error occurred.')).toMatchInlineSnapshot(`
7
+ [ViemError: An error occurred.
8
+
9
+ Version: viem@1.0.2]
10
+ `)
11
+
12
+ expect(
13
+ new BaseError('An error occurred.', { details: 'details' }),
14
+ ).toMatchInlineSnapshot(`
15
+ [ViemError: An error occurred.
16
+
17
+ Details: details
18
+ Version: viem@1.0.2]
19
+ `)
20
+ })
21
+
22
+ test('BaseError (w/ docsPath)', () => {
23
+ expect(
24
+ new BaseError('An error occurred.', {
25
+ details: 'details',
26
+ docsPath: '/lol',
27
+ }),
28
+ ).toMatchInlineSnapshot(`
29
+ [ViemError: An error occurred.
30
+
31
+ Docs: https://viem.sh/lol
32
+
33
+ Details: details
34
+ Version: viem@1.0.2]
35
+ `)
36
+ })
37
+
38
+ test('inherited BaseError', () => {
39
+ const err = new BaseError('An error occurred.', {
40
+ details: 'details',
41
+ docsPath: '/lol',
42
+ })
43
+ expect(
44
+ new BaseError('An internal error occurred.', {
45
+ cause: err,
46
+ }),
47
+ ).toMatchInlineSnapshot(`
48
+ [ViemError: An internal error occurred.
49
+
50
+ Docs: https://viem.sh/lol
51
+
52
+ Details: details
53
+ Version: viem@1.0.2]
54
+ `)
55
+ })
56
+
57
+ test('inherited Error', () => {
58
+ const err = new Error('details')
59
+ expect(
60
+ new BaseError('An internal error occurred.', {
61
+ cause: err,
62
+ docsPath: '/lol',
63
+ }),
64
+ ).toMatchInlineSnapshot(`
65
+ [ViemError: An internal error occurred.
66
+
67
+ Docs: https://viem.sh/lol
68
+
69
+ Details: details
70
+ Version: viem@1.0.2]
71
+ `)
72
+ })
@@ -0,0 +1,57 @@
1
+ // @ts-ignore
2
+ import pkg from '../../package.json'
3
+ import { stringify } from '../utils/stringify'
4
+
5
+ /* c8 ignore next */
6
+ const version = process.env.TEST ? '1.0.2' : pkg.version
7
+
8
+ type BaseErrorArgs = { docsPath?: string } & (
9
+ | {
10
+ cause?: never
11
+ details?: string
12
+ }
13
+ | {
14
+ cause: BaseError | Error
15
+ details?: never
16
+ }
17
+ )
18
+
19
+ export class BaseError extends Error {
20
+ humanMessage: string
21
+ details: string
22
+ docsPath?: string
23
+
24
+ name = 'ViemError'
25
+
26
+ constructor(humanMessage: string, args: BaseErrorArgs = {}) {
27
+ const details =
28
+ args.cause instanceof BaseError
29
+ ? args.cause.details
30
+ : args.cause?.message
31
+ ? args.cause.message
32
+ : args.details!
33
+ const docsPath =
34
+ args.cause instanceof BaseError
35
+ ? args.cause.docsPath || args.docsPath
36
+ : args.docsPath
37
+ const message = [
38
+ humanMessage,
39
+ ...(docsPath ? ['', `Docs: https://viem.sh${docsPath}`] : []),
40
+ '',
41
+ ...(details ? [`Details: ${details}`] : []),
42
+ `Version: viem@${version}`,
43
+ ...(args.cause &&
44
+ !(args.cause instanceof BaseError) &&
45
+ Object.keys(args.cause).length > 0
46
+ ? [`Internal Error: ${stringify(args.cause)}`]
47
+ : []),
48
+ ].join('\n')
49
+
50
+ super(message)
51
+
52
+ if (args.cause) this.cause = args.cause
53
+ this.details = details
54
+ this.docsPath = docsPath
55
+ this.humanMessage = humanMessage
56
+ }
57
+ }
@@ -0,0 +1,24 @@
1
+ import { expect, test } from 'vitest'
2
+ import { BlockNotFoundError } from './block'
3
+
4
+ test('BlockNotFoundError', () => {
5
+ expect(
6
+ new BlockNotFoundError({ blockNumber: 69420n }),
7
+ ).toMatchInlineSnapshot(`
8
+ [BlockNotFoundError: Block at number "69420" could not be found.
9
+
10
+ Version: viem@1.0.2]
11
+ `)
12
+ expect(
13
+ new BlockNotFoundError({ blockHash: '0x69420' }),
14
+ ).toMatchInlineSnapshot(`
15
+ [BlockNotFoundError: Block at hash "0x69420" could not be found.
16
+
17
+ Version: viem@1.0.2]
18
+ `)
19
+ expect(new BlockNotFoundError({})).toMatchInlineSnapshot(`
20
+ [BlockNotFoundError: Block could not be found.
21
+
22
+ Version: viem@1.0.2]
23
+ `)
24
+ })
@@ -0,0 +1,18 @@
1
+ import { Hash } from '../types'
2
+ import { BaseError } from './base'
3
+
4
+ export class BlockNotFoundError extends BaseError {
5
+ name = 'BlockNotFoundError'
6
+ constructor({
7
+ blockHash,
8
+ blockNumber,
9
+ }: {
10
+ blockHash?: Hash
11
+ blockNumber?: bigint
12
+ }) {
13
+ let identifier = 'Block'
14
+ if (blockHash) identifier = `Block at hash "${blockHash}"`
15
+ if (blockNumber) identifier = `Block at number "${blockNumber}"`
16
+ super(`${identifier} could not be found.`)
17
+ }
18
+ }