viem 0.4.0-main.20230419T202802 → 0.4.0-main.20230419T213620

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 (96) hide show
  1. package/dist/cjs/actions/public/call.js +97 -10
  2. package/dist/cjs/actions/public/call.js.map +1 -1
  3. package/dist/cjs/actions/public/simulateContract.js +1 -0
  4. package/dist/cjs/actions/public/simulateContract.js.map +1 -1
  5. package/dist/cjs/chains.js +1 -24
  6. package/dist/cjs/chains.js.map +1 -1
  7. package/dist/cjs/clients/createPublicClient.js +2 -1
  8. package/dist/cjs/clients/createPublicClient.js.map +1 -1
  9. package/dist/cjs/clients/transports/fallback.js +1 -1
  10. package/dist/cjs/clients/transports/fallback.js.map +1 -1
  11. package/dist/cjs/constants/contract.js +5 -0
  12. package/dist/cjs/constants/contract.js.map +1 -0
  13. package/dist/cjs/constants/index.js +3 -1
  14. package/dist/cjs/constants/index.js.map +1 -1
  15. package/dist/cjs/errors/chain.js +13 -1
  16. package/dist/cjs/errors/chain.js.map +1 -1
  17. package/dist/cjs/errors/contract.js +1 -1
  18. package/dist/cjs/errors/contract.js.map +1 -1
  19. package/dist/cjs/errors/index.js +4 -2
  20. package/dist/cjs/errors/index.js.map +1 -1
  21. package/dist/cjs/errors/version.js +1 -1
  22. package/dist/cjs/index.js +5 -4
  23. package/dist/cjs/index.js.map +1 -1
  24. package/dist/cjs/utils/errors/getContractError.js +7 -5
  25. package/dist/cjs/utils/errors/getContractError.js.map +1 -1
  26. package/dist/cjs/utils/promise/createBatchScheduler.js +47 -0
  27. package/dist/cjs/utils/promise/createBatchScheduler.js.map +1 -0
  28. package/dist/cjs/utils/promise/index.js +3 -1
  29. package/dist/cjs/utils/promise/index.js.map +1 -1
  30. package/dist/esm/actions/public/call.js +91 -4
  31. package/dist/esm/actions/public/call.js.map +1 -1
  32. package/dist/esm/actions/public/simulateContract.js +1 -0
  33. package/dist/esm/actions/public/simulateContract.js.map +1 -1
  34. package/dist/esm/clients/createPublicClient.js +2 -1
  35. package/dist/esm/clients/createPublicClient.js.map +1 -1
  36. package/dist/esm/clients/transports/fallback.js +1 -1
  37. package/dist/esm/clients/transports/fallback.js.map +1 -1
  38. package/dist/esm/constants/contract.js +2 -0
  39. package/dist/esm/constants/contract.js.map +1 -0
  40. package/dist/esm/constants/index.js +1 -0
  41. package/dist/esm/constants/index.js.map +1 -1
  42. package/dist/esm/errors/chain.js +11 -0
  43. package/dist/esm/errors/chain.js.map +1 -1
  44. package/dist/esm/errors/contract.js +1 -1
  45. package/dist/esm/errors/contract.js.map +1 -1
  46. package/dist/esm/errors/index.js +1 -1
  47. package/dist/esm/errors/index.js.map +1 -1
  48. package/dist/esm/errors/version.js +1 -1
  49. package/dist/esm/index.js +1 -1
  50. package/dist/esm/index.js.map +1 -1
  51. package/dist/esm/utils/errors/getContractError.js +7 -5
  52. package/dist/esm/utils/errors/getContractError.js.map +1 -1
  53. package/dist/esm/utils/promise/createBatchScheduler.js +43 -0
  54. package/dist/esm/utils/promise/createBatchScheduler.js.map +1 -0
  55. package/dist/esm/utils/promise/index.js +1 -0
  56. package/dist/esm/utils/promise/index.js.map +1 -1
  57. package/dist/types/actions/public/call.d.ts +1 -0
  58. package/dist/types/actions/public/call.d.ts.map +1 -1
  59. package/dist/types/actions/public/simulateContract.d.ts +1 -1
  60. package/dist/types/actions/public/simulateContract.d.ts.map +1 -1
  61. package/dist/types/clients/createPublicClient.d.ts +15 -3
  62. package/dist/types/clients/createPublicClient.d.ts.map +1 -1
  63. package/dist/types/constants/contract.d.ts +2 -0
  64. package/dist/types/constants/contract.d.ts.map +1 -0
  65. package/dist/types/constants/index.d.ts +1 -0
  66. package/dist/types/constants/index.d.ts.map +1 -1
  67. package/dist/types/errors/chain.d.ts +4 -0
  68. package/dist/types/errors/chain.d.ts.map +1 -1
  69. package/dist/types/errors/index.d.ts +1 -1
  70. package/dist/types/errors/index.d.ts.map +1 -1
  71. package/dist/types/errors/version.d.ts +1 -1
  72. package/dist/types/index.d.ts +1 -1
  73. package/dist/types/index.d.ts.map +1 -1
  74. package/dist/types/types/eip1193.d.ts +1 -1
  75. package/dist/types/types/eip1193.d.ts.map +1 -1
  76. package/dist/types/utils/errors/getContractError.d.ts.map +1 -1
  77. package/dist/types/utils/promise/createBatchScheduler.d.ts +15 -0
  78. package/dist/types/utils/promise/createBatchScheduler.d.ts.map +1 -0
  79. package/dist/types/utils/promise/index.d.ts +1 -0
  80. package/dist/types/utils/promise/index.d.ts.map +1 -1
  81. package/package.json +1 -1
  82. package/src/actions/public/call.ts +141 -7
  83. package/src/actions/public/simulateContract.ts +2 -1
  84. package/src/clients/createPublicClient.ts +17 -1
  85. package/src/clients/transports/fallback.ts +1 -1
  86. package/src/constants/contract.ts +1 -0
  87. package/src/constants/index.ts +2 -0
  88. package/src/errors/chain.ts +8 -0
  89. package/src/errors/contract.ts +1 -1
  90. package/src/errors/index.ts +1 -0
  91. package/src/errors/version.ts +1 -1
  92. package/src/index.ts +1 -0
  93. package/src/types/eip1193.ts +1 -1
  94. package/src/utils/errors/getContractError.ts +9 -5
  95. package/src/utils/promise/createBatchScheduler.ts +82 -0
  96. package/src/utils/promise/index.ts +1 -0
@@ -37,6 +37,7 @@ export {
37
37
  ChainDoesNotSupportContract,
38
38
  ChainMismatchError,
39
39
  ChainNotFoundError,
40
+ ClientChainNotConfiguredError,
40
41
  InvalidChainIdError,
41
42
  } from './chain.js'
42
43
 
@@ -1 +1 @@
1
- export const version = '0.4.0-main.20230419T202802'
1
+ export const version = '0.4.0-main.20230419T213620'
package/src/index.ts CHANGED
@@ -182,6 +182,7 @@ export {
182
182
  CallExecutionError,
183
183
  ChainDisconnectedError,
184
184
  ChainDoesNotSupportContract,
185
+ ClientChainNotConfiguredError,
185
186
  ContractFunctionExecutionError,
186
187
  ContractFunctionRevertedError,
187
188
  ContractFunctionZeroDataError,
@@ -207,7 +207,7 @@ export type PublicRequests = {
207
207
  */
208
208
  method: 'eth_call'
209
209
  params: [
210
- request: TransactionRequest,
210
+ request: Partial<TransactionRequest>,
211
211
  block: BlockNumber | BlockTag | BlockIdentifier,
212
212
  ]
213
213
  }): Promise<Hex>
@@ -33,11 +33,12 @@ export function getContractError(
33
33
  sender?: Address
34
34
  },
35
35
  ) {
36
- const { code, data, message } = (
36
+ const { code, data, message, shortMessage } = (
37
37
  err instanceof RawContractError
38
38
  ? err
39
- : err instanceof CallExecutionError ||
40
- err instanceof EstimateGasExecutionError
39
+ : !(err.cause && 'data' in (err.cause as BaseError)) &&
40
+ (err instanceof CallExecutionError ||
41
+ err instanceof EstimateGasExecutionError)
41
42
  ? ((err.cause as BaseError)?.cause as BaseError)?.cause || {}
42
43
  : err.cause || {}
43
44
  ) as RawContractError
@@ -45,12 +46,15 @@ export function getContractError(
45
46
  let cause = err
46
47
  if (err instanceof AbiDecodingZeroDataError) {
47
48
  cause = new ContractFunctionZeroDataError({ functionName })
48
- } else if (code === EXECUTION_REVERTED_ERROR_CODE && (data || message)) {
49
+ } else if (
50
+ code === EXECUTION_REVERTED_ERROR_CODE &&
51
+ (data || message || shortMessage)
52
+ ) {
49
53
  cause = new ContractFunctionRevertedError({
50
54
  abi,
51
55
  data,
52
56
  functionName,
53
- message,
57
+ message: shortMessage ?? message,
54
58
  })
55
59
  }
56
60
 
@@ -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'