viem 0.3.2 → 0.3.4

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 (137) hide show
  1. package/README.md +6 -0
  2. package/dist/cjs/actions/public/call.js +97 -10
  3. package/dist/cjs/actions/public/call.js.map +1 -1
  4. package/dist/cjs/actions/public/simulateContract.js +1 -0
  5. package/dist/cjs/actions/public/simulateContract.js.map +1 -1
  6. package/dist/cjs/chains.js +1 -24
  7. package/dist/cjs/chains.js.map +1 -1
  8. package/dist/cjs/clients/createPublicClient.js +2 -1
  9. package/dist/cjs/clients/createPublicClient.js.map +1 -1
  10. package/dist/cjs/clients/transports/fallback.js +1 -1
  11. package/dist/cjs/clients/transports/fallback.js.map +1 -1
  12. package/dist/cjs/constants/contract.js +5 -0
  13. package/dist/cjs/constants/contract.js.map +1 -0
  14. package/dist/cjs/constants/index.js +3 -1
  15. package/dist/cjs/constants/index.js.map +1 -1
  16. package/dist/cjs/errors/chain.js +13 -1
  17. package/dist/cjs/errors/chain.js.map +1 -1
  18. package/dist/cjs/errors/contract.js +1 -1
  19. package/dist/cjs/errors/contract.js.map +1 -1
  20. package/dist/cjs/errors/encoding.js +13 -1
  21. package/dist/cjs/errors/encoding.js.map +1 -1
  22. package/dist/cjs/errors/index.js +5 -2
  23. package/dist/cjs/errors/index.js.map +1 -1
  24. package/dist/cjs/errors/version.js +1 -1
  25. package/dist/cjs/index.js +5 -4
  26. package/dist/cjs/index.js.map +1 -1
  27. package/dist/cjs/utils/encoding/fromBytes.js +29 -12
  28. package/dist/cjs/utils/encoding/fromBytes.js.map +1 -1
  29. package/dist/cjs/utils/encoding/fromHex.js +32 -10
  30. package/dist/cjs/utils/encoding/fromHex.js.map +1 -1
  31. package/dist/cjs/utils/encoding/toBytes.js +31 -15
  32. package/dist/cjs/utils/encoding/toBytes.js.map +1 -1
  33. package/dist/cjs/utils/encoding/toHex.js +31 -20
  34. package/dist/cjs/utils/encoding/toHex.js.map +1 -1
  35. package/dist/cjs/utils/errors/getContractError.js +7 -5
  36. package/dist/cjs/utils/errors/getContractError.js.map +1 -1
  37. package/dist/cjs/utils/promise/createBatchScheduler.js +47 -0
  38. package/dist/cjs/utils/promise/createBatchScheduler.js.map +1 -0
  39. package/dist/cjs/utils/promise/index.js +3 -1
  40. package/dist/cjs/utils/promise/index.js.map +1 -1
  41. package/dist/cjs/utils/transaction/serializeTransaction.js +13 -15
  42. package/dist/cjs/utils/transaction/serializeTransaction.js.map +1 -1
  43. package/dist/esm/actions/public/call.js +91 -4
  44. package/dist/esm/actions/public/call.js.map +1 -1
  45. package/dist/esm/actions/public/simulateContract.js +1 -0
  46. package/dist/esm/actions/public/simulateContract.js.map +1 -1
  47. package/dist/esm/clients/createPublicClient.js +2 -1
  48. package/dist/esm/clients/createPublicClient.js.map +1 -1
  49. package/dist/esm/clients/transports/fallback.js +1 -1
  50. package/dist/esm/clients/transports/fallback.js.map +1 -1
  51. package/dist/esm/constants/contract.js +2 -0
  52. package/dist/esm/constants/contract.js.map +1 -0
  53. package/dist/esm/constants/index.js +1 -0
  54. package/dist/esm/constants/index.js.map +1 -1
  55. package/dist/esm/errors/chain.js +11 -0
  56. package/dist/esm/errors/chain.js.map +1 -1
  57. package/dist/esm/errors/contract.js +1 -1
  58. package/dist/esm/errors/contract.js.map +1 -1
  59. package/dist/esm/errors/encoding.js +11 -0
  60. package/dist/esm/errors/encoding.js.map +1 -1
  61. package/dist/esm/errors/index.js +2 -2
  62. package/dist/esm/errors/index.js.map +1 -1
  63. package/dist/esm/errors/version.js +1 -1
  64. package/dist/esm/index.js +1 -1
  65. package/dist/esm/index.js.map +1 -1
  66. package/dist/esm/utils/encoding/fromBytes.js +30 -13
  67. package/dist/esm/utils/encoding/fromBytes.js.map +1 -1
  68. package/dist/esm/utils/encoding/fromHex.js +31 -10
  69. package/dist/esm/utils/encoding/fromHex.js.map +1 -1
  70. package/dist/esm/utils/encoding/toBytes.js +31 -15
  71. package/dist/esm/utils/encoding/toBytes.js.map +1 -1
  72. package/dist/esm/utils/encoding/toHex.js +28 -17
  73. package/dist/esm/utils/encoding/toHex.js.map +1 -1
  74. package/dist/esm/utils/errors/getContractError.js +7 -5
  75. package/dist/esm/utils/errors/getContractError.js.map +1 -1
  76. package/dist/esm/utils/promise/createBatchScheduler.js +43 -0
  77. package/dist/esm/utils/promise/createBatchScheduler.js.map +1 -0
  78. package/dist/esm/utils/promise/index.js +1 -0
  79. package/dist/esm/utils/promise/index.js.map +1 -1
  80. package/dist/esm/utils/transaction/serializeTransaction.js +13 -15
  81. package/dist/esm/utils/transaction/serializeTransaction.js.map +1 -1
  82. package/dist/types/actions/public/call.d.ts +1 -0
  83. package/dist/types/actions/public/call.d.ts.map +1 -1
  84. package/dist/types/actions/public/simulateContract.d.ts +1 -1
  85. package/dist/types/actions/public/simulateContract.d.ts.map +1 -1
  86. package/dist/types/clients/createPublicClient.d.ts +15 -3
  87. package/dist/types/clients/createPublicClient.d.ts.map +1 -1
  88. package/dist/types/constants/contract.d.ts +2 -0
  89. package/dist/types/constants/contract.d.ts.map +1 -0
  90. package/dist/types/constants/index.d.ts +1 -0
  91. package/dist/types/constants/index.d.ts.map +1 -1
  92. package/dist/types/errors/chain.d.ts +4 -0
  93. package/dist/types/errors/chain.d.ts.map +1 -1
  94. package/dist/types/errors/encoding.d.ts +7 -0
  95. package/dist/types/errors/encoding.d.ts.map +1 -1
  96. package/dist/types/errors/index.d.ts +2 -2
  97. package/dist/types/errors/index.d.ts.map +1 -1
  98. package/dist/types/errors/version.d.ts +1 -1
  99. package/dist/types/index.d.ts +1 -1
  100. package/dist/types/index.d.ts.map +1 -1
  101. package/dist/types/types/eip1193.d.ts +1 -1
  102. package/dist/types/types/eip1193.d.ts.map +1 -1
  103. package/dist/types/utils/encoding/fromBytes.d.ts +95 -10
  104. package/dist/types/utils/encoding/fromBytes.d.ts.map +1 -1
  105. package/dist/types/utils/encoding/fromHex.d.ts +122 -12
  106. package/dist/types/utils/encoding/fromHex.d.ts.map +1 -1
  107. package/dist/types/utils/encoding/toBytes.d.ts +113 -9
  108. package/dist/types/utils/encoding/toBytes.d.ts.map +1 -1
  109. package/dist/types/utils/encoding/toHex.d.ts +120 -10
  110. package/dist/types/utils/encoding/toHex.d.ts.map +1 -1
  111. package/dist/types/utils/errors/getContractError.d.ts.map +1 -1
  112. package/dist/types/utils/promise/createBatchScheduler.d.ts +15 -0
  113. package/dist/types/utils/promise/createBatchScheduler.d.ts.map +1 -0
  114. package/dist/types/utils/promise/index.d.ts +1 -0
  115. package/dist/types/utils/promise/index.d.ts.map +1 -1
  116. package/package.json +1 -1
  117. package/src/actions/public/call.ts +141 -7
  118. package/src/actions/public/simulateContract.ts +2 -1
  119. package/src/clients/createPublicClient.ts +17 -1
  120. package/src/clients/transports/fallback.ts +1 -1
  121. package/src/constants/contract.ts +1 -0
  122. package/src/constants/index.ts +2 -0
  123. package/src/errors/chain.ts +8 -0
  124. package/src/errors/contract.ts +1 -1
  125. package/src/errors/encoding.ts +9 -0
  126. package/src/errors/index.ts +2 -0
  127. package/src/errors/version.ts +1 -1
  128. package/src/index.ts +1 -0
  129. package/src/types/eip1193.ts +1 -1
  130. package/src/utils/encoding/fromBytes.ts +147 -18
  131. package/src/utils/encoding/fromHex.ts +162 -19
  132. package/src/utils/encoding/toBytes.ts +148 -18
  133. package/src/utils/encoding/toHex.ts +151 -26
  134. package/src/utils/errors/getContractError.ts +9 -5
  135. package/src/utils/promise/createBatchScheduler.ts +82 -0
  136. package/src/utils/promise/index.ts +1 -0
  137. package/src/utils/transaction/serializeTransaction.ts +13 -15
@@ -0,0 +1,82 @@
1
+ type Resolved<TReturnType extends readonly unknown[] = any> = [
2
+ result: TReturnType[number],
3
+ results: TReturnType,
4
+ ]
5
+
6
+ type PendingPromise<TReturnType extends readonly unknown[] = any> = {
7
+ resolve?: (data: Resolved<TReturnType>) => void
8
+ reject?: (reason?: unknown) => void
9
+ }
10
+
11
+ type SchedulerItem = { args: unknown; pendingPromise: PendingPromise }
12
+
13
+ const schedulerCache = new Map<number | string, SchedulerItem[]>()
14
+
15
+ export function createBatchScheduler<
16
+ TParameters,
17
+ TReturnType extends readonly unknown[],
18
+ >({
19
+ fn,
20
+ id,
21
+ shouldSplitBatch,
22
+ wait = 0,
23
+ }: {
24
+ fn: (args: TParameters[]) => Promise<TReturnType>
25
+ id: number | string
26
+ shouldSplitBatch?: (args: TParameters[]) => boolean
27
+ wait?: number
28
+ }) {
29
+ const exec = async () => {
30
+ const scheduler = getScheduler()
31
+ flush()
32
+
33
+ const args = scheduler.map(({ args }) => args)
34
+
35
+ if (args.length === 0) return
36
+
37
+ fn(args as TParameters[])
38
+ .then((data) => {
39
+ scheduler.forEach(({ pendingPromise }, i) =>
40
+ pendingPromise.resolve?.([data[i], data]),
41
+ )
42
+ })
43
+ .catch((err) => {
44
+ scheduler.forEach(({ pendingPromise }) => pendingPromise.reject?.(err))
45
+ })
46
+ }
47
+
48
+ const flush = () => schedulerCache.delete(id)
49
+
50
+ const getBatchedArgs = () =>
51
+ getScheduler().map(({ args }) => args) as TParameters[]
52
+
53
+ const getScheduler = () => schedulerCache.get(id) || []
54
+
55
+ const setScheduler = (item: SchedulerItem) =>
56
+ schedulerCache.set(id, [...getScheduler(), item])
57
+
58
+ return {
59
+ flush,
60
+ async schedule(args: TParameters) {
61
+ const pendingPromise: PendingPromise<TReturnType> = {}
62
+ const promise = new Promise<Resolved<TReturnType>>((resolve, reject) => {
63
+ pendingPromise.resolve = resolve
64
+ pendingPromise.reject = reject
65
+ })
66
+
67
+ const split = shouldSplitBatch?.([...getBatchedArgs(), args])
68
+
69
+ if (split) exec()
70
+
71
+ const hasActiveScheduler = getScheduler().length > 0
72
+ if (hasActiveScheduler) {
73
+ setScheduler({ args, pendingPromise })
74
+ return promise
75
+ }
76
+
77
+ setScheduler({ args, pendingPromise })
78
+ setTimeout(exec, wait)
79
+ return promise
80
+ },
81
+ }
82
+ }
@@ -1,3 +1,4 @@
1
+ export { createBatchScheduler } from './createBatchScheduler.js'
1
2
  export { getCache, withCache } from './withCache.js'
2
3
  export { withRetry } from './withRetry.js'
3
4
  export { withTimeout } from './withTimeout.js'
@@ -82,14 +82,12 @@ function serializeTransactionEIP1559(
82
82
 
83
83
  const serializedTransaction = [
84
84
  toHex(chainId),
85
- typeof nonce !== 'undefined' ? toHex(nonce) : '0x',
86
- typeof maxPriorityFeePerGas !== 'undefined'
87
- ? toHex(maxPriorityFeePerGas)
88
- : '0x',
89
- typeof maxFeePerGas !== 'undefined' ? toHex(maxFeePerGas) : '0x',
90
- typeof gas !== 'undefined' ? toHex(gas) : '0x',
85
+ nonce ? toHex(nonce) : '0x',
86
+ maxPriorityFeePerGas ? toHex(maxPriorityFeePerGas) : '0x',
87
+ maxFeePerGas ? toHex(maxFeePerGas) : '0x',
88
+ gas ? toHex(gas) : '0x',
91
89
  to ?? '0x',
92
- typeof value !== 'undefined' ? toHex(value) : '0x',
90
+ value ? toHex(value) : '0x',
93
91
  data ?? '0x',
94
92
  serializedAccessList,
95
93
  ]
@@ -120,11 +118,11 @@ function serializeTransactionEIP2930(
120
118
 
121
119
  const serializedTransaction = [
122
120
  toHex(chainId),
123
- typeof nonce !== 'undefined' ? toHex(nonce) : '0x',
124
- typeof gasPrice !== 'undefined' ? toHex(gasPrice) : '0x',
125
- typeof gas !== 'undefined' ? toHex(gas) : '0x',
121
+ nonce ? toHex(nonce) : '0x',
122
+ gasPrice ? toHex(gasPrice) : '0x',
123
+ gas ? toHex(gas) : '0x',
126
124
  to ?? '0x',
127
- typeof value !== 'undefined' ? toHex(value) : '0x',
125
+ value ? toHex(value) : '0x',
128
126
  data ?? '0x',
129
127
  serializedAccessList,
130
128
  ]
@@ -151,11 +149,11 @@ function serializeTransactionLegacy(
151
149
  assertTransactionLegacy(transaction)
152
150
 
153
151
  let serializedTransaction = [
154
- typeof nonce !== 'undefined' ? toHex(nonce) : '0x',
155
- typeof gasPrice !== 'undefined' ? toHex(gasPrice) : '0x',
156
- typeof gas !== 'undefined' ? toHex(gas) : '0x',
152
+ nonce ? toHex(nonce) : '0x',
153
+ gasPrice ? toHex(gasPrice) : '0x',
154
+ gas ? toHex(gas) : '0x',
157
155
  to ?? '0x',
158
- typeof value !== 'undefined' ? toHex(value) : '0x',
156
+ value ? toHex(value) : '0x',
159
157
  data ?? '0x',
160
158
  ]
161
159