ox 1.0.0-beta.8 → 1.0.0
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.
- package/CHANGELOG.md +1143 -0
- package/dist/core/Abi.d.ts +6 -2
- package/dist/core/Abi.d.ts.map +1 -1
- package/dist/core/Abi.js +6 -3
- package/dist/core/Abi.js.map +1 -1
- package/dist/core/AbiConstructor.d.ts +2 -1
- package/dist/core/AbiConstructor.d.ts.map +1 -1
- package/dist/core/AbiConstructor.js +2 -2
- package/dist/core/AbiConstructor.js.map +1 -1
- package/dist/core/AbiError.d.ts +3 -1
- package/dist/core/AbiError.d.ts.map +1 -1
- package/dist/core/AbiError.js +2 -2
- package/dist/core/AbiError.js.map +1 -1
- package/dist/core/AbiEvent.d.ts +3 -1
- package/dist/core/AbiEvent.d.ts.map +1 -1
- package/dist/core/AbiEvent.js +2 -2
- package/dist/core/AbiEvent.js.map +1 -1
- package/dist/core/AbiFunction.d.ts +3 -1
- package/dist/core/AbiFunction.d.ts.map +1 -1
- package/dist/core/AbiFunction.js +2 -2
- package/dist/core/AbiFunction.js.map +1 -1
- package/dist/core/AbiItem.d.ts +6 -3
- package/dist/core/AbiItem.d.ts.map +1 -1
- package/dist/core/AbiItem.js +9 -7
- package/dist/core/AbiItem.js.map +1 -1
- package/dist/core/AbiParameter.d.ts +88 -0
- package/dist/core/AbiParameter.d.ts.map +1 -0
- package/dist/core/AbiParameter.js +82 -0
- package/dist/core/AbiParameter.js.map +1 -0
- package/dist/core/AbiParameters.d.ts +58 -2
- package/dist/core/AbiParameters.d.ts.map +1 -1
- package/dist/core/AbiParameters.js +60 -6
- package/dist/core/AbiParameters.js.map +1 -1
- package/dist/core/Rlp.d.ts +27 -5
- package/dist/core/Rlp.d.ts.map +1 -1
- package/dist/core/Rlp.js +40 -4
- package/dist/core/Rlp.js.map +1 -1
- package/dist/core/RpcSchema.d.ts +2 -2
- package/dist/core/internal/abiParameters.d.ts.map +1 -1
- package/dist/core/internal/abiParameters.js +21 -3
- package/dist/core/internal/abiParameters.js.map +1 -1
- package/dist/core/internal/human-readable/errors.d.ts +103 -0
- package/dist/core/internal/human-readable/errors.d.ts.map +1 -0
- package/dist/core/internal/human-readable/errors.js +142 -0
- package/dist/core/internal/human-readable/errors.js.map +1 -0
- package/dist/core/internal/human-readable/formatAbi.d.ts +19 -0
- package/dist/core/internal/human-readable/formatAbi.d.ts.map +1 -0
- package/dist/core/internal/human-readable/formatAbi.js +18 -0
- package/dist/core/internal/human-readable/formatAbi.js.map +1 -0
- package/dist/core/internal/human-readable/formatAbiItem.d.ts +23 -0
- package/dist/core/internal/human-readable/formatAbiItem.d.ts.map +1 -0
- package/dist/core/internal/human-readable/formatAbiItem.js +25 -0
- package/dist/core/internal/human-readable/formatAbiItem.js.map +1 -0
- package/dist/core/internal/human-readable/formatAbiParameter.d.ts +41 -0
- package/dist/core/internal/human-readable/formatAbiParameter.d.ts.map +1 -0
- package/dist/core/internal/human-readable/formatAbiParameter.js +36 -0
- package/dist/core/internal/human-readable/formatAbiParameter.js.map +1 -0
- package/dist/core/internal/human-readable/formatAbiParameters.d.ts +26 -0
- package/dist/core/internal/human-readable/formatAbiParameters.d.ts.map +1 -0
- package/dist/core/internal/human-readable/formatAbiParameters.js +19 -0
- package/dist/core/internal/human-readable/formatAbiParameters.js.map +1 -0
- package/dist/core/internal/human-readable/parseAbi.d.ts +22 -0
- package/dist/core/internal/human-readable/parseAbi.d.ts.map +1 -0
- package/dist/core/internal/human-readable/parseAbi.js +22 -0
- package/dist/core/internal/human-readable/parseAbi.js.map +1 -0
- package/dist/core/internal/human-readable/parseAbiItem.d.ts +23 -0
- package/dist/core/internal/human-readable/parseAbiItem.d.ts.map +1 -0
- package/dist/core/internal/human-readable/parseAbiItem.js +30 -0
- package/dist/core/internal/human-readable/parseAbiItem.js.map +1 -0
- package/dist/core/internal/human-readable/parseAbiParameter.d.ts +28 -0
- package/dist/core/internal/human-readable/parseAbiParameter.d.ts.map +1 -0
- package/dist/core/internal/human-readable/parseAbiParameter.js +32 -0
- package/dist/core/internal/human-readable/parseAbiParameter.js.map +1 -0
- package/dist/core/internal/human-readable/parseAbiParameters.d.ts +38 -0
- package/dist/core/internal/human-readable/parseAbiParameters.d.ts.map +1 -0
- package/dist/core/internal/human-readable/parseAbiParameters.js +39 -0
- package/dist/core/internal/human-readable/parseAbiParameters.js.map +1 -0
- package/dist/core/internal/human-readable/regex.d.ts +9 -0
- package/dist/core/internal/human-readable/regex.d.ts.map +1 -0
- package/dist/core/internal/human-readable/regex.js +12 -0
- package/dist/core/internal/human-readable/regex.js.map +1 -0
- package/dist/core/internal/human-readable/runtime/cache.d.ts +22 -0
- package/dist/core/internal/human-readable/runtime/cache.d.ts.map +1 -0
- package/dist/core/internal/human-readable/runtime/cache.js +86 -0
- package/dist/core/internal/human-readable/runtime/cache.js.map +1 -0
- package/dist/core/internal/human-readable/runtime/signatures.d.ts +39 -0
- package/dist/core/internal/human-readable/runtime/signatures.d.ts.map +1 -0
- package/dist/core/internal/human-readable/runtime/signatures.js +67 -0
- package/dist/core/internal/human-readable/runtime/signatures.js.map +1 -0
- package/dist/core/internal/human-readable/runtime/structs.d.ts +3 -0
- package/dist/core/internal/human-readable/runtime/structs.d.ts.map +1 -0
- package/dist/core/internal/human-readable/runtime/structs.js +79 -0
- package/dist/core/internal/human-readable/runtime/structs.js.map +1 -0
- package/dist/core/internal/human-readable/runtime/utils.d.ts +205 -0
- package/dist/core/internal/human-readable/runtime/utils.d.ts.map +1 -0
- package/dist/core/internal/human-readable/runtime/utils.js +232 -0
- package/dist/core/internal/human-readable/runtime/utils.js.map +1 -0
- package/dist/core/internal/human-readable/types/signatures.d.ts +38 -0
- package/dist/core/internal/human-readable/types/signatures.d.ts.map +1 -0
- package/dist/core/internal/human-readable/types/signatures.js +2 -0
- package/dist/core/internal/human-readable/types/signatures.js.map +1 -0
- package/dist/core/internal/human-readable/types/structs.d.ts +48 -0
- package/dist/core/internal/human-readable/types/structs.d.ts.map +1 -0
- package/dist/core/internal/human-readable/types/structs.js +2 -0
- package/dist/core/internal/human-readable/types/structs.js.map +1 -0
- package/dist/core/internal/human-readable/types/utils.d.ts +163 -0
- package/dist/core/internal/human-readable/types/utils.d.ts.map +1 -0
- package/dist/core/internal/human-readable/types/utils.js +2 -0
- package/dist/core/internal/human-readable/types/utils.js.map +1 -0
- package/dist/core/internal/human-readable/types.d.ts +29 -0
- package/dist/core/internal/human-readable/types.d.ts.map +1 -0
- package/dist/core/internal/human-readable/types.js +2 -0
- package/dist/core/internal/human-readable/types.js.map +1 -0
- package/dist/core/internal/rpcSchemas/eth.d.ts +36 -0
- package/dist/core/internal/rpcSchemas/eth.d.ts.map +1 -1
- package/dist/erc4337/EntryPoint.d.ts +1072 -1
- package/dist/erc4337/EntryPoint.d.ts.map +1 -1
- package/dist/erc4337/EntryPoint.js +872 -0
- package/dist/erc4337/EntryPoint.js.map +1 -1
- package/dist/erc4337/RpcSchema.d.ts +2 -2
- package/dist/erc4337/RpcSchema.d.ts.map +1 -1
- package/dist/erc4337/UserOperation.d.ts +39 -10
- package/dist/erc4337/UserOperation.d.ts.map +1 -1
- package/dist/erc4337/UserOperation.js +62 -48
- package/dist/erc4337/UserOperation.js.map +1 -1
- package/dist/erc4337/UserOperationGas.d.ts +9 -5
- package/dist/erc4337/UserOperationGas.d.ts.map +1 -1
- package/dist/erc4337/UserOperationGas.js +17 -15
- package/dist/erc4337/UserOperationGas.js.map +1 -1
- package/dist/erc4337/UserOperationReceipt.d.ts +4 -4
- package/dist/erc4337/UserOperationReceipt.d.ts.map +1 -1
- package/dist/erc4337/UserOperationReceipt.js.map +1 -1
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -1
- package/dist/tempo/Channel.d.ts +8 -14
- package/dist/tempo/Channel.d.ts.map +1 -1
- package/dist/tempo/Channel.js +4 -8
- package/dist/tempo/Channel.js.map +1 -1
- package/dist/tempo/KeyAuthorization.d.ts +5 -5
- package/dist/tempo/KeyAuthorization.d.ts.map +1 -1
- package/dist/tempo/KeyAuthorization.js +4 -4
- package/dist/tempo/KeyAuthorization.js.map +1 -1
- package/dist/tempo/MultisigConfig.d.ts +37 -85
- package/dist/tempo/MultisigConfig.d.ts.map +1 -1
- package/dist/tempo/MultisigConfig.js +39 -83
- package/dist/tempo/MultisigConfig.js.map +1 -1
- package/dist/tempo/PoolId.d.ts +8 -7
- package/dist/tempo/PoolId.d.ts.map +1 -1
- package/dist/tempo/PoolId.js +10 -6
- package/dist/tempo/PoolId.js.map +1 -1
- package/dist/tempo/SignatureEnvelope.d.ts +32 -30
- package/dist/tempo/SignatureEnvelope.d.ts.map +1 -1
- package/dist/tempo/SignatureEnvelope.js +56 -51
- package/dist/tempo/SignatureEnvelope.js.map +1 -1
- package/dist/tempo/Transaction.d.ts +16 -5
- package/dist/tempo/Transaction.d.ts.map +1 -1
- package/dist/tempo/Transaction.js +34 -7
- package/dist/tempo/Transaction.js.map +1 -1
- package/dist/tempo/TransactionReceipt.d.ts +3 -3
- package/dist/tempo/TransactionReceipt.d.ts.map +1 -1
- package/dist/tempo/TransactionReceipt.js +8 -1
- package/dist/tempo/TransactionReceipt.js.map +1 -1
- package/dist/tempo/TransactionRequest.d.ts +15 -2
- package/dist/tempo/TransactionRequest.d.ts.map +1 -1
- package/dist/tempo/TransactionRequest.js +65 -29
- package/dist/tempo/TransactionRequest.js.map +1 -1
- package/dist/tempo/TxEnvelopeTempo.d.ts +2 -3
- package/dist/tempo/TxEnvelopeTempo.d.ts.map +1 -1
- package/dist/tempo/TxEnvelopeTempo.js +5 -6
- package/dist/tempo/TxEnvelopeTempo.js.map +1 -1
- package/dist/tempo/index.d.ts +6 -26
- package/dist/tempo/index.d.ts.map +1 -1
- package/dist/tempo/index.js +6 -26
- package/dist/tempo/index.js.map +1 -1
- package/dist/zod/Abi.d.ts +214 -0
- package/dist/zod/Abi.d.ts.map +1 -0
- package/dist/zod/Abi.js +5 -0
- package/dist/zod/Abi.js.map +1 -0
- package/dist/zod/AbiConstructor.d.ts +58 -0
- package/dist/zod/AbiConstructor.d.ts.map +1 -0
- package/dist/zod/AbiConstructor.js +18 -0
- package/dist/zod/AbiConstructor.js.map +1 -0
- package/dist/zod/AbiError.d.ts +20 -0
- package/dist/zod/AbiError.d.ts.map +1 -0
- package/dist/zod/AbiError.js +9 -0
- package/dist/zod/AbiError.js.map +1 -0
- package/dist/zod/AbiEvent.d.ts +23 -0
- package/dist/zod/AbiEvent.d.ts.map +1 -0
- package/dist/zod/AbiEvent.js +11 -0
- package/dist/zod/AbiEvent.js.map +1 -0
- package/dist/zod/AbiFallback.d.ts +16 -0
- package/dist/zod/AbiFallback.d.ts.map +1 -0
- package/dist/zod/AbiFallback.js +16 -0
- package/dist/zod/AbiFallback.js.map +1 -0
- package/dist/zod/AbiFunction.d.ts +109 -0
- package/dist/zod/AbiFunction.d.ts.map +1 -0
- package/dist/zod/AbiFunction.js +26 -0
- package/dist/zod/AbiFunction.js.map +1 -0
- package/dist/zod/AbiItem.d.ts +216 -0
- package/dist/zod/AbiItem.d.ts.map +1 -0
- package/dist/zod/AbiItem.js +26 -0
- package/dist/zod/AbiItem.js.map +1 -0
- package/dist/zod/AbiParameter.d.ts +32 -0
- package/dist/zod/AbiParameter.d.ts.map +1 -0
- package/dist/zod/AbiParameter.js +28 -0
- package/dist/zod/AbiParameter.js.map +1 -0
- package/dist/zod/AbiParameters.d.ts +30 -0
- package/dist/zod/AbiParameters.d.ts.map +1 -0
- package/dist/zod/AbiParameters.js +6 -0
- package/dist/zod/AbiParameters.js.map +1 -0
- package/dist/zod/AbiReceive.d.ts +6 -0
- package/dist/zod/AbiReceive.d.ts.map +1 -0
- package/dist/zod/AbiReceive.js +7 -0
- package/dist/zod/AbiReceive.js.map +1 -0
- package/dist/zod/RpcSchema.d.ts +6 -5
- package/dist/zod/RpcSchema.d.ts.map +1 -1
- package/dist/zod/Solidity.d.ts +15 -0
- package/dist/zod/Solidity.d.ts.map +1 -0
- package/dist/zod/Solidity.js +41 -0
- package/dist/zod/Solidity.js.map +1 -0
- package/dist/zod/TypedData.d.ts +226 -0
- package/dist/zod/TypedData.d.ts.map +1 -0
- package/dist/zod/TypedData.js +84 -0
- package/dist/zod/TypedData.js.map +1 -0
- package/dist/zod/internal/rpcSchemas/Eth.d.ts +1 -0
- package/dist/zod/internal/rpcSchemas/Eth.d.ts.map +1 -1
- package/dist/zod/internal/rpcSchemas/Eth.js +5 -0
- package/dist/zod/internal/rpcSchemas/Eth.js.map +1 -1
- package/dist/zod/tempo/AuthorizationTempo.d.ts +0 -20
- package/dist/zod/tempo/AuthorizationTempo.d.ts.map +1 -1
- package/dist/zod/tempo/KeyAuthorization.d.ts +503 -67
- package/dist/zod/tempo/KeyAuthorization.d.ts.map +1 -1
- package/dist/zod/tempo/KeyAuthorization.js +32 -15
- package/dist/zod/tempo/KeyAuthorization.js.map +1 -1
- package/dist/zod/tempo/RpcSchemaTempo.d.ts +216 -34
- package/dist/zod/tempo/RpcSchemaTempo.d.ts.map +1 -1
- package/dist/zod/tempo/SignatureEnvelope.d.ts +0 -6
- package/dist/zod/tempo/SignatureEnvelope.d.ts.map +1 -1
- package/dist/zod/tempo/SignatureEnvelope.js +0 -2
- package/dist/zod/tempo/SignatureEnvelope.js.map +1 -1
- package/dist/zod/tempo/Transaction.d.ts +1479 -333
- package/dist/zod/tempo/Transaction.d.ts.map +1 -1
- package/dist/zod/tempo/Transaction.js +65 -16
- package/dist/zod/tempo/Transaction.js.map +1 -1
- package/dist/zod/tempo/TransactionRequest.d.ts +410 -57
- package/dist/zod/tempo/TransactionRequest.d.ts.map +1 -1
- package/dist/zod/tempo/TransactionRequest.js +81 -18
- package/dist/zod/tempo/TransactionRequest.js.map +1 -1
- package/dist/zod/tempo/TxEnvelopeTempo.d.ts +225 -18
- package/dist/zod/tempo/TxEnvelopeTempo.d.ts.map +1 -1
- package/dist/zod/tempo/TxEnvelopeTempo.js +1 -1
- package/dist/zod/tempo/TxEnvelopeTempo.js.map +1 -1
- package/dist/zod/tempo/ZoneRpcAuthentication.d.ts +0 -3
- package/dist/zod/tempo/ZoneRpcAuthentication.d.ts.map +1 -1
- package/dist/zod/tempo/z.d.ts +0 -1
- package/dist/zod/tempo/z.d.ts.map +1 -1
- package/dist/zod/tempo/z.js +0 -1
- package/dist/zod/tempo/z.js.map +1 -1
- package/dist/zod/z.d.ts +12 -0
- package/dist/zod/z.d.ts.map +1 -1
- package/dist/zod/z.js +12 -0
- package/dist/zod/z.js.map +1 -1
- package/package.json +67 -11
- package/src/core/Abi.bench.ts +30 -0
- package/src/core/Abi.ts +13 -4
- package/src/core/AbiConstructor.ts +3 -2
- package/src/core/AbiError.ts +6 -2
- package/src/core/AbiEvent.ts +6 -2
- package/src/core/AbiFunction.ts +6 -2
- package/src/core/AbiItem.bench.ts +19 -0
- package/src/core/AbiItem.ts +20 -10
- package/src/core/AbiParameter.bench.ts +35 -0
- package/src/core/AbiParameter.ts +126 -0
- package/src/core/AbiParameters.bench.ts +22 -0
- package/src/core/AbiParameters.ts +77 -8
- package/src/core/Rlp.ts +66 -3
- package/src/core/RpcSchema.ts +2 -2
- package/src/core/_test/Abi.test.ts +4 -0
- package/src/core/_test/AbiItem.test.ts +3 -0
- package/src/core/_test/AbiParameter.test-d.ts +41 -0
- package/src/core/_test/AbiParameter.test.ts +84 -0
- package/src/core/_test/AbiParameters.decode.test.ts +88 -12
- package/src/core/_test/AbiParameters.encode.test.ts +68 -0
- package/src/core/_test/AbiParameters.test.ts +7 -0
- package/src/core/_test/Rlp.test.ts +101 -0
- package/src/core/_test/index.test.ts +1 -0
- package/src/core/internal/abiParameters.ts +21 -3
- package/src/core/internal/human-readable/_snap/formatAbi.test.ts.snap +74 -0
- package/src/core/internal/human-readable/_snap/parseAbi.test.ts.snap +2353 -0
- package/src/core/internal/human-readable/errors.test.ts +258 -0
- package/src/core/internal/human-readable/errors.ts +205 -0
- package/src/core/internal/human-readable/formatAbi.test-d.ts +144 -0
- package/src/core/internal/human-readable/formatAbi.test.ts +23 -0
- package/src/core/internal/human-readable/formatAbi.ts +37 -0
- package/src/core/internal/human-readable/formatAbiItem.test-d.ts +115 -0
- package/src/core/internal/human-readable/formatAbiItem.test.ts +102 -0
- package/src/core/internal/human-readable/formatAbiItem.ts +136 -0
- package/src/core/internal/human-readable/formatAbiParameter.test-d.ts +125 -0
- package/src/core/internal/human-readable/formatAbiParameter.test.ts +126 -0
- package/src/core/internal/human-readable/formatAbiParameter.ts +86 -0
- package/src/core/internal/human-readable/formatAbiParameters.test-d.ts +92 -0
- package/src/core/internal/human-readable/formatAbiParameters.test.ts +32 -0
- package/src/core/internal/human-readable/formatAbiParameters.ts +46 -0
- package/src/core/internal/human-readable/human-readable.bench-d.ts +58 -0
- package/src/core/internal/human-readable/integration.test.ts +68 -0
- package/src/core/internal/human-readable/parseAbi.test-d.ts +188 -0
- package/src/core/internal/human-readable/parseAbi.test.ts +82 -0
- package/src/core/internal/human-readable/parseAbi.ts +59 -0
- package/src/core/internal/human-readable/parseAbiItem.test-d.ts +183 -0
- package/src/core/internal/human-readable/parseAbiItem.test.ts +264 -0
- package/src/core/internal/human-readable/parseAbiItem.ts +91 -0
- package/src/core/internal/human-readable/parseAbiParameter.test-d.ts +68 -0
- package/src/core/internal/human-readable/parseAbiParameter.test.ts +207 -0
- package/src/core/internal/human-readable/parseAbiParameter.ts +95 -0
- package/src/core/internal/human-readable/parseAbiParameters.test-d.ts +160 -0
- package/src/core/internal/human-readable/parseAbiParameters.test.ts +80 -0
- package/src/core/internal/human-readable/parseAbiParameters.ts +123 -0
- package/src/core/internal/human-readable/regex.ts +15 -0
- package/src/core/internal/human-readable/runtime/cache.ts +96 -0
- package/src/core/internal/human-readable/runtime/signatures.test.ts +236 -0
- package/src/core/internal/human-readable/runtime/signatures.ts +106 -0
- package/src/core/internal/human-readable/runtime/structs.test.ts +210 -0
- package/src/core/internal/human-readable/runtime/structs.ts +97 -0
- package/src/core/internal/human-readable/runtime/utils.test.ts +717 -0
- package/src/core/internal/human-readable/runtime/utils.ts +344 -0
- package/src/core/internal/human-readable/types/signatures.test-d.ts +255 -0
- package/src/core/internal/human-readable/types/signatures.ts +369 -0
- package/src/core/internal/human-readable/types/structs.test-d.ts +221 -0
- package/src/core/internal/human-readable/types/structs.ts +88 -0
- package/src/core/internal/human-readable/types/utils.test-d.ts +1029 -0
- package/src/core/internal/human-readable/types/utils.ts +392 -0
- package/src/core/internal/human-readable/types.ts +69 -0
- package/src/core/internal/rpcSchemas/eth.ts +36 -0
- package/src/erc4337/EntryPoint.ts +875 -1
- package/src/erc4337/RpcSchema.ts +4 -2
- package/src/erc4337/UserOperation.ts +130 -60
- package/src/erc4337/UserOperationGas.ts +36 -28
- package/src/erc4337/UserOperationReceipt.ts +15 -7
- package/src/erc4337/_test/EntryPoint.test.ts +48 -0
- package/src/erc4337/_test/RpcSchema.test-d.ts +56 -0
- package/src/erc4337/_test/UserOperation.snap-d.ts +31 -0
- package/src/erc4337/_test/UserOperation.test.ts +221 -5
- package/src/erc4337/_test/UserOperationGas.test.ts +30 -1
- package/src/index.ts +38 -0
- package/src/tempo/Channel.test.ts +2 -23
- package/src/tempo/Channel.ts +10 -22
- package/src/tempo/KeyAuthorization.test.ts +22 -0
- package/src/tempo/KeyAuthorization.ts +9 -9
- package/src/tempo/MultisigConfig.test.ts +54 -37
- package/src/tempo/MultisigConfig.ts +59 -134
- package/src/tempo/PoolId.test.ts +7 -41
- package/src/tempo/PoolId.ts +15 -10
- package/src/tempo/SignatureEnvelope.test.ts +118 -17
- package/src/tempo/SignatureEnvelope.ts +77 -72
- package/src/tempo/Transaction.test.ts +0 -15
- package/src/tempo/Transaction.ts +63 -12
- package/src/tempo/TransactionReceipt.test.ts +76 -0
- package/src/tempo/TransactionReceipt.ts +11 -5
- package/src/tempo/TransactionRequest.test.ts +174 -1
- package/src/tempo/TransactionRequest.ts +84 -32
- package/src/tempo/TxEnvelopeTempo.test.ts +2 -2
- package/src/tempo/TxEnvelopeTempo.ts +7 -7
- package/src/tempo/e2e.test.ts +228 -50
- package/src/tempo/index.ts +6 -26
- package/src/version.ts +1 -1
- package/src/zod/Abi.ts +5 -0
- package/src/zod/AbiConstructor.ts +24 -0
- package/src/zod/AbiError.ts +9 -0
- package/src/zod/AbiEvent.ts +11 -0
- package/src/zod/AbiFallback.ts +22 -0
- package/src/zod/AbiFunction.ts +32 -0
- package/src/zod/AbiItem.ts +28 -0
- package/src/zod/AbiParameter.ts +36 -0
- package/src/zod/AbiParameters.ts +7 -0
- package/src/zod/AbiReceive.ts +7 -0
- package/src/zod/RpcSchema.ts +5 -5
- package/src/zod/Solidity.ts +83 -0
- package/src/zod/TypedData.ts +111 -0
- package/src/zod/_test/Abi.test-d.ts +46 -0
- package/src/zod/_test/Abi.test.ts +163 -0
- package/src/zod/_test/TypedData.test-d.ts +20 -0
- package/src/zod/_test/TypedData.test.ts +87 -0
- package/src/zod/_test/z.test-d.ts +6 -0
- package/src/zod/_test/z.test.ts +17 -0
- package/src/zod/internal/rpcSchemas/Eth.ts +6 -0
- package/src/zod/tempo/KeyAuthorization.ts +34 -15
- package/src/zod/tempo/SignatureEnvelope.ts +0 -2
- package/src/zod/tempo/Transaction.ts +84 -22
- package/src/zod/tempo/TransactionRequest.ts +86 -20
- package/src/zod/tempo/TxEnvelopeTempo.ts +1 -1
- package/src/zod/tempo/_test/KeyAuthorization.test.ts +53 -0
- package/src/zod/tempo/_test/SignatureEnvelope.test.ts +0 -2
- package/src/zod/tempo/_test/Transaction.test.ts +155 -0
- package/src/zod/tempo/_test/TransactionRequest.test.ts +44 -0
- package/src/zod/tempo/z.ts +0 -1
- package/src/zod/z.ts +12 -0
- package/dist/tempo/TokenId.d.ts +0 -87
- package/dist/tempo/TokenId.d.ts.map +0 -1
- package/dist/tempo/TokenId.js +0 -123
- package/dist/tempo/TokenId.js.map +0 -1
- package/dist/zod/tempo/TokenId.d.ts +0 -6
- package/dist/zod/tempo/TokenId.d.ts.map +0 -1
- package/dist/zod/tempo/TokenId.js +0 -14
- package/dist/zod/tempo/TokenId.js.map +0 -1
- package/src/CHANGELOG.md +0 -820
- package/src/tempo/TokenId.bench.ts +0 -36
- package/src/tempo/TokenId.test.ts +0 -79
- package/src/tempo/TokenId.ts +0 -141
- package/src/zod/tempo/TokenId.ts +0 -15
- package/src/zod/tempo/_test/TokenId.test-d.ts +0 -17
- package/src/zod/tempo/_test/TokenId.test.ts +0 -21
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { expectTypeOf, test } from 'vp/test'
|
|
2
|
+
|
|
3
|
+
import type { Abi } from 'abitype'
|
|
4
|
+
import type { ParseAbiItem } from './parseAbiItem.js'
|
|
5
|
+
import { parseAbiItem } from './parseAbiItem.js'
|
|
6
|
+
|
|
7
|
+
test('ParseAbiItem', () => {
|
|
8
|
+
expectTypeOf<ParseAbiItem<''>>().toEqualTypeOf<never>()
|
|
9
|
+
expectTypeOf<ParseAbiItem<['']>>().toEqualTypeOf<never>()
|
|
10
|
+
expectTypeOf<
|
|
11
|
+
ParseAbiItem<['struct Foo { string name; }']>
|
|
12
|
+
>().toEqualTypeOf<never>()
|
|
13
|
+
|
|
14
|
+
// string
|
|
15
|
+
expectTypeOf<ParseAbiItem<'function foo()'>>().toEqualTypeOf<{
|
|
16
|
+
readonly name: 'foo'
|
|
17
|
+
readonly type: 'function'
|
|
18
|
+
readonly stateMutability: 'nonpayable'
|
|
19
|
+
readonly inputs: readonly []
|
|
20
|
+
readonly outputs: readonly []
|
|
21
|
+
}>()
|
|
22
|
+
|
|
23
|
+
// Array
|
|
24
|
+
expectTypeOf<
|
|
25
|
+
ParseAbiItem<['function bar(Foo, bytes32)', 'struct Foo { string name; }']>
|
|
26
|
+
>().toEqualTypeOf<{
|
|
27
|
+
readonly name: 'bar'
|
|
28
|
+
readonly type: 'function'
|
|
29
|
+
readonly stateMutability: 'nonpayable'
|
|
30
|
+
readonly inputs: readonly [
|
|
31
|
+
{
|
|
32
|
+
readonly type: 'tuple'
|
|
33
|
+
readonly components: readonly [
|
|
34
|
+
{
|
|
35
|
+
readonly name: 'name'
|
|
36
|
+
readonly type: 'string'
|
|
37
|
+
},
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
readonly type: 'bytes32'
|
|
42
|
+
},
|
|
43
|
+
]
|
|
44
|
+
readonly outputs: readonly []
|
|
45
|
+
}>()
|
|
46
|
+
|
|
47
|
+
expectTypeOf<
|
|
48
|
+
ParseAbiItem<
|
|
49
|
+
[
|
|
50
|
+
'event Transfer(address indexed from, address indexed to, uint256 amount)',
|
|
51
|
+
]
|
|
52
|
+
>
|
|
53
|
+
>().toEqualTypeOf<{
|
|
54
|
+
readonly name: 'Transfer'
|
|
55
|
+
readonly type: 'event'
|
|
56
|
+
readonly inputs: readonly [
|
|
57
|
+
{
|
|
58
|
+
readonly name: 'from'
|
|
59
|
+
readonly type: 'address'
|
|
60
|
+
readonly indexed: true
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
readonly name: 'to'
|
|
64
|
+
readonly type: 'address'
|
|
65
|
+
readonly indexed: true
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
readonly name: 'amount'
|
|
69
|
+
readonly type: 'uint256'
|
|
70
|
+
},
|
|
71
|
+
]
|
|
72
|
+
}>()
|
|
73
|
+
|
|
74
|
+
const abiItem = ['function bar(Foo, bytes32)', 'struct Foo { string name; }']
|
|
75
|
+
expectTypeOf<ParseAbiItem<typeof abiItem>>().toEqualTypeOf<Abi[number]>()
|
|
76
|
+
|
|
77
|
+
expectTypeOf<ParseAbiItem<['function foo ()']>>().toEqualTypeOf<never>()
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
test('parseAbiItem', () => {
|
|
81
|
+
// @ts-expect-error empty array not allowed
|
|
82
|
+
expectTypeOf(parseAbiItem([])).toEqualTypeOf<never>()
|
|
83
|
+
expectTypeOf(
|
|
84
|
+
parseAbiItem(['struct Foo { string name; }']),
|
|
85
|
+
).toEqualTypeOf<never>()
|
|
86
|
+
|
|
87
|
+
// string
|
|
88
|
+
expectTypeOf(parseAbiItem('function foo()')).toEqualTypeOf<{
|
|
89
|
+
readonly name: 'foo'
|
|
90
|
+
readonly type: 'function'
|
|
91
|
+
readonly stateMutability: 'nonpayable'
|
|
92
|
+
readonly inputs: readonly []
|
|
93
|
+
readonly outputs: readonly []
|
|
94
|
+
}>()
|
|
95
|
+
expectTypeOf(parseAbiItem('function foo((string), address)')).toEqualTypeOf<{
|
|
96
|
+
readonly name: 'foo'
|
|
97
|
+
readonly type: 'function'
|
|
98
|
+
readonly stateMutability: 'nonpayable'
|
|
99
|
+
readonly inputs: readonly [
|
|
100
|
+
{
|
|
101
|
+
readonly type: 'tuple'
|
|
102
|
+
readonly components: readonly [
|
|
103
|
+
{
|
|
104
|
+
readonly type: 'string'
|
|
105
|
+
},
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
readonly type: 'address'
|
|
110
|
+
},
|
|
111
|
+
]
|
|
112
|
+
readonly outputs: readonly []
|
|
113
|
+
}>()
|
|
114
|
+
|
|
115
|
+
expectTypeOf(
|
|
116
|
+
// @ts-expect-error invalid signature
|
|
117
|
+
parseAbiItem(''),
|
|
118
|
+
).toEqualTypeOf<never>()
|
|
119
|
+
|
|
120
|
+
// Array
|
|
121
|
+
const res2 = parseAbiItem([
|
|
122
|
+
'function bar(Foo, bytes32)',
|
|
123
|
+
'struct Foo { string name; }',
|
|
124
|
+
])
|
|
125
|
+
expectTypeOf<typeof res2>().toEqualTypeOf<{
|
|
126
|
+
readonly name: 'bar'
|
|
127
|
+
readonly type: 'function'
|
|
128
|
+
readonly stateMutability: 'nonpayable'
|
|
129
|
+
readonly inputs: readonly [
|
|
130
|
+
{
|
|
131
|
+
readonly type: 'tuple'
|
|
132
|
+
readonly components: readonly [
|
|
133
|
+
{
|
|
134
|
+
readonly name: 'name'
|
|
135
|
+
readonly type: 'string'
|
|
136
|
+
},
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
readonly type: 'bytes32'
|
|
141
|
+
},
|
|
142
|
+
]
|
|
143
|
+
readonly outputs: readonly []
|
|
144
|
+
}>()
|
|
145
|
+
|
|
146
|
+
const abi2 = [
|
|
147
|
+
'function foo()',
|
|
148
|
+
'function bar(Foo, bytes32)',
|
|
149
|
+
'struct Foo { string name; }',
|
|
150
|
+
]
|
|
151
|
+
expectTypeOf(parseAbiItem(abi2)).toEqualTypeOf<Abi[number]>()
|
|
152
|
+
|
|
153
|
+
// @ts-expect-error invalid signature
|
|
154
|
+
expectTypeOf(parseAbiItem(['function foo ()'])).toEqualTypeOf<never>()
|
|
155
|
+
|
|
156
|
+
const signature: string = 'function foo()'
|
|
157
|
+
expectTypeOf(parseAbiItem(signature)).toEqualTypeOf<Abi[number]>()
|
|
158
|
+
|
|
159
|
+
// fallback
|
|
160
|
+
expectTypeOf(parseAbiItem('fallback() external')).toEqualTypeOf<{
|
|
161
|
+
readonly type: 'fallback'
|
|
162
|
+
readonly stateMutability: 'nonpayable'
|
|
163
|
+
}>()
|
|
164
|
+
expectTypeOf(parseAbiItem('fallback() external payable')).toEqualTypeOf<{
|
|
165
|
+
readonly type: 'fallback'
|
|
166
|
+
readonly stateMutability: 'payable'
|
|
167
|
+
}>()
|
|
168
|
+
|
|
169
|
+
// receive
|
|
170
|
+
expectTypeOf(parseAbiItem('receive() external payable')).toEqualTypeOf<{
|
|
171
|
+
readonly type: 'receive'
|
|
172
|
+
readonly stateMutability: 'payable'
|
|
173
|
+
}>()
|
|
174
|
+
})
|
|
175
|
+
|
|
176
|
+
test('nested tuples', () => {
|
|
177
|
+
const formattedAbiItem =
|
|
178
|
+
'function stepChanges((uint256 characterID, uint64 newPosition, uint24 xp, uint24 epoch, uint8 hp, (int32 x, int32 y, uint8 hp, uint8 kind)[5] monsters, (uint8 monsterIndexPlus1, uint8 attackCardsUsed1, uint8 attackCardsUsed2, uint8 defenseCardsUsed1, uint8 defenseCardsUsed2) battle) stateChanges, uint256 action, bool revetOnInvalidMoves) pure returns ((uint256 characterID, uint64 newPosition, uint24 xp, uint24 epoch, uint8 hp, (int32 x, int32 y, uint8 hp, uint8 kind)[5] monsters, (uint8 monsterIndexPlus1, uint8 attackCardsUsed1, uint8 attackCardsUsed2, uint8 defenseCardsUsed1, uint8 defenseCardsUsed2) battle))'
|
|
179
|
+
|
|
180
|
+
const abiItem = parseAbiItem(formattedAbiItem)
|
|
181
|
+
expectTypeOf(abiItem.stateMutability).toEqualTypeOf<'pure'>()
|
|
182
|
+
expectTypeOf(abiItem.inputs.length).toEqualTypeOf<3>()
|
|
183
|
+
})
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { expect, test } from 'vp/test'
|
|
2
|
+
|
|
3
|
+
import { parseAbiItem } from './parseAbiItem.js'
|
|
4
|
+
|
|
5
|
+
test('parseAbiItem', () => {
|
|
6
|
+
// @ts-expect-error invalid signature type
|
|
7
|
+
expect(() => parseAbiItem('')).toThrowErrorMatchingInlineSnapshot(
|
|
8
|
+
`[Abi.UnknownSignatureError: Unknown signature.]`,
|
|
9
|
+
)
|
|
10
|
+
// @ts-expect-error invalid signature type
|
|
11
|
+
expect(() => parseAbiItem([])).toThrowErrorMatchingInlineSnapshot(
|
|
12
|
+
`
|
|
13
|
+
[AbiItem.InvalidAbiItemError: Failed to parse ABI item.
|
|
14
|
+
|
|
15
|
+
Details: parseAbiItem([])
|
|
16
|
+
See: https://oxlib.sh/api/AbiItem/from]
|
|
17
|
+
`,
|
|
18
|
+
)
|
|
19
|
+
expect(() =>
|
|
20
|
+
parseAbiItem(['struct Foo { string name; }']),
|
|
21
|
+
).toThrowErrorMatchingInlineSnapshot(
|
|
22
|
+
`
|
|
23
|
+
[AbiItem.InvalidAbiItemError: Failed to parse ABI item.
|
|
24
|
+
|
|
25
|
+
Details: parseAbiItem([
|
|
26
|
+
"struct Foo { string name; }"
|
|
27
|
+
])
|
|
28
|
+
See: https://oxlib.sh/api/AbiItem/from]
|
|
29
|
+
`,
|
|
30
|
+
)
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
test.each([
|
|
34
|
+
{
|
|
35
|
+
signature: ['function foo(string)'],
|
|
36
|
+
expected: {
|
|
37
|
+
type: 'function',
|
|
38
|
+
name: 'foo',
|
|
39
|
+
inputs: [{ type: 'string' }],
|
|
40
|
+
outputs: [],
|
|
41
|
+
stateMutability: 'nonpayable',
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
signature: [
|
|
46
|
+
'event Foo(address indexed from, address indexed to, uint256 amount)',
|
|
47
|
+
],
|
|
48
|
+
expected: {
|
|
49
|
+
type: 'event',
|
|
50
|
+
name: 'Foo',
|
|
51
|
+
inputs: [
|
|
52
|
+
{ type: 'address', name: 'from', indexed: true },
|
|
53
|
+
{ type: 'address', name: 'to', indexed: true },
|
|
54
|
+
{ type: 'uint256', name: 'amount' },
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
signature: ['fallback() external'],
|
|
60
|
+
expected: {
|
|
61
|
+
type: 'fallback',
|
|
62
|
+
stateMutability: 'nonpayable',
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
signature: ['fallback() external payable'],
|
|
67
|
+
expected: {
|
|
68
|
+
type: 'fallback',
|
|
69
|
+
stateMutability: 'payable',
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
])('parseAbiItem($signature)', ({ signature, expected }) => {
|
|
73
|
+
expect(parseAbiItem(signature)).toEqual(expected)
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
test.each([
|
|
77
|
+
{
|
|
78
|
+
signature: ['struct Foo { string bar; }', 'function foo(Foo)'],
|
|
79
|
+
expected: {
|
|
80
|
+
type: 'function',
|
|
81
|
+
name: 'foo',
|
|
82
|
+
inputs: [
|
|
83
|
+
{ type: 'tuple', components: [{ name: 'bar', type: 'string' }] },
|
|
84
|
+
],
|
|
85
|
+
outputs: [],
|
|
86
|
+
stateMutability: 'nonpayable',
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
])('parseAbiItem($signature)', ({ signature, expected }) => {
|
|
90
|
+
expect(parseAbiItem(signature)).toEqual(expected)
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
test('nested tuples', () => {
|
|
94
|
+
const formattedAbiItem =
|
|
95
|
+
'function stepChanges((uint256 characterID, uint64 newPosition, uint24 xp, uint24 epoch, uint8 hp, (int32 x, int32 y, uint8 hp, uint8 kind)[5] monsters, (uint8 monsterIndexPlus1, uint8 attackCardsUsed1, uint8 attackCardsUsed2, uint8 defenseCardsUsed1, uint8 defenseCardsUsed2) battle) stateChanges, uint256 action, bool revetOnInvalidMoves) pure returns ((uint256 characterID, uint64 newPosition, uint24 xp, uint24 epoch, uint8 hp, (int32 x, int32 y, uint8 hp, uint8 kind)[5] monsters, (uint8 monsterIndexPlus1, uint8 attackCardsUsed1, uint8 attackCardsUsed2, uint8 defenseCardsUsed1, uint8 defenseCardsUsed2) battle))'
|
|
96
|
+
expect(parseAbiItem(formattedAbiItem)).toMatchInlineSnapshot(
|
|
97
|
+
`
|
|
98
|
+
{
|
|
99
|
+
"inputs": [
|
|
100
|
+
{
|
|
101
|
+
"components": [
|
|
102
|
+
{
|
|
103
|
+
"name": "characterID",
|
|
104
|
+
"type": "uint256",
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"name": "newPosition",
|
|
108
|
+
"type": "uint64",
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"name": "xp",
|
|
112
|
+
"type": "uint24",
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"name": "epoch",
|
|
116
|
+
"type": "uint24",
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"name": "hp",
|
|
120
|
+
"type": "uint8",
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"components": [
|
|
124
|
+
{
|
|
125
|
+
"name": "x",
|
|
126
|
+
"type": "int32",
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"name": "y",
|
|
130
|
+
"type": "int32",
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"name": "hp",
|
|
134
|
+
"type": "uint8",
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"name": "kind",
|
|
138
|
+
"type": "uint8",
|
|
139
|
+
},
|
|
140
|
+
],
|
|
141
|
+
"name": "monsters",
|
|
142
|
+
"type": "tuple[5]",
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"components": [
|
|
146
|
+
{
|
|
147
|
+
"name": "monsterIndexPlus1",
|
|
148
|
+
"type": "uint8",
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"name": "attackCardsUsed1",
|
|
152
|
+
"type": "uint8",
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"name": "attackCardsUsed2",
|
|
156
|
+
"type": "uint8",
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"name": "defenseCardsUsed1",
|
|
160
|
+
"type": "uint8",
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"name": "defenseCardsUsed2",
|
|
164
|
+
"type": "uint8",
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
"name": "battle",
|
|
168
|
+
"type": "tuple",
|
|
169
|
+
},
|
|
170
|
+
],
|
|
171
|
+
"name": "stateChanges",
|
|
172
|
+
"type": "tuple",
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"name": "action",
|
|
176
|
+
"type": "uint256",
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"name": "revetOnInvalidMoves",
|
|
180
|
+
"type": "bool",
|
|
181
|
+
},
|
|
182
|
+
],
|
|
183
|
+
"name": "stepChanges",
|
|
184
|
+
"outputs": [
|
|
185
|
+
{
|
|
186
|
+
"components": [
|
|
187
|
+
{
|
|
188
|
+
"name": "characterID",
|
|
189
|
+
"type": "uint256",
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"name": "newPosition",
|
|
193
|
+
"type": "uint64",
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"name": "xp",
|
|
197
|
+
"type": "uint24",
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"name": "epoch",
|
|
201
|
+
"type": "uint24",
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"name": "hp",
|
|
205
|
+
"type": "uint8",
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"components": [
|
|
209
|
+
{
|
|
210
|
+
"name": "x",
|
|
211
|
+
"type": "int32",
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"name": "y",
|
|
215
|
+
"type": "int32",
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"name": "hp",
|
|
219
|
+
"type": "uint8",
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"name": "kind",
|
|
223
|
+
"type": "uint8",
|
|
224
|
+
},
|
|
225
|
+
],
|
|
226
|
+
"name": "monsters",
|
|
227
|
+
"type": "tuple[5]",
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"components": [
|
|
231
|
+
{
|
|
232
|
+
"name": "monsterIndexPlus1",
|
|
233
|
+
"type": "uint8",
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"name": "attackCardsUsed1",
|
|
237
|
+
"type": "uint8",
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"name": "attackCardsUsed2",
|
|
241
|
+
"type": "uint8",
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"name": "defenseCardsUsed1",
|
|
245
|
+
"type": "uint8",
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"name": "defenseCardsUsed2",
|
|
249
|
+
"type": "uint8",
|
|
250
|
+
},
|
|
251
|
+
],
|
|
252
|
+
"name": "battle",
|
|
253
|
+
"type": "tuple",
|
|
254
|
+
},
|
|
255
|
+
],
|
|
256
|
+
"type": "tuple",
|
|
257
|
+
},
|
|
258
|
+
],
|
|
259
|
+
"stateMutability": "pure",
|
|
260
|
+
"type": "function",
|
|
261
|
+
}
|
|
262
|
+
`,
|
|
263
|
+
)
|
|
264
|
+
})
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { Abi } from 'abitype'
|
|
2
|
+
import type { Narrow } from 'abitype'
|
|
3
|
+
import type { Error, Filter } from './types.js'
|
|
4
|
+
import { InvalidAbiItemError } from './errors.js'
|
|
5
|
+
import { isStructSignature } from './runtime/signatures.js'
|
|
6
|
+
import { parseStructs } from './runtime/structs.js'
|
|
7
|
+
import { parseSignature } from './runtime/utils.js'
|
|
8
|
+
import type { Signature, Signatures } from './types/signatures.js'
|
|
9
|
+
import type { ParseStructs } from './types/structs.js'
|
|
10
|
+
import type { ParseSignature } from './types/utils.js'
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Parses human-readable ABI item (e.g. error, event, function) into `Abi` item.
|
|
14
|
+
*
|
|
15
|
+
* @param signature - Human-readable ABI item
|
|
16
|
+
* @returns Parsed `Abi` item.
|
|
17
|
+
*/
|
|
18
|
+
export type ParseAbiItem<
|
|
19
|
+
signature extends string | readonly string[] | readonly unknown[],
|
|
20
|
+
> =
|
|
21
|
+
| (signature extends string
|
|
22
|
+
? string extends signature
|
|
23
|
+
? Abi[number]
|
|
24
|
+
: signature extends Signature<signature> // Validate signature
|
|
25
|
+
? ParseSignature<signature>
|
|
26
|
+
: never
|
|
27
|
+
: never)
|
|
28
|
+
| (signature extends readonly string[]
|
|
29
|
+
? string[] extends signature
|
|
30
|
+
? Abi[number] // Return generic Abi item since type was no inferrable
|
|
31
|
+
: signature extends Signatures<signature> // Validate signature
|
|
32
|
+
? ParseStructs<signature> extends infer structs
|
|
33
|
+
? {
|
|
34
|
+
[key in keyof signature]: ParseSignature<
|
|
35
|
+
signature[key] extends string ? signature[key] : never,
|
|
36
|
+
structs
|
|
37
|
+
>
|
|
38
|
+
} extends infer mapped extends readonly unknown[]
|
|
39
|
+
? // Filter out `never` since those are structs
|
|
40
|
+
Filter<mapped, never>[0] extends infer result
|
|
41
|
+
? result extends undefined // convert `undefined` to `never` (e.g. `ParseAbiItem<['struct Foo { string name; }']>`)
|
|
42
|
+
? never
|
|
43
|
+
: result
|
|
44
|
+
: never
|
|
45
|
+
: never
|
|
46
|
+
: never
|
|
47
|
+
: never
|
|
48
|
+
: never)
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Parses human-readable ABI item (e.g. error, event, function) into `Abi` item.
|
|
52
|
+
*
|
|
53
|
+
* @param signature - Human-readable ABI item
|
|
54
|
+
* @returns Parsed `Abi` item.
|
|
55
|
+
*/
|
|
56
|
+
export function parseAbiItem<
|
|
57
|
+
signature extends string | readonly string[] | readonly unknown[],
|
|
58
|
+
>(
|
|
59
|
+
signature: Narrow<signature> &
|
|
60
|
+
(
|
|
61
|
+
| (signature extends string
|
|
62
|
+
? string extends signature
|
|
63
|
+
? unknown
|
|
64
|
+
: Signature<signature>
|
|
65
|
+
: never)
|
|
66
|
+
| (signature extends readonly string[]
|
|
67
|
+
? signature extends readonly [] // empty array
|
|
68
|
+
? Error<'At least one signature required.'>
|
|
69
|
+
: string[] extends signature
|
|
70
|
+
? unknown
|
|
71
|
+
: Signatures<signature>
|
|
72
|
+
: never)
|
|
73
|
+
),
|
|
74
|
+
): ParseAbiItem<signature> {
|
|
75
|
+
let abiItem: ParseAbiItem<signature> | undefined
|
|
76
|
+
if (typeof signature === 'string')
|
|
77
|
+
abiItem = parseSignature(signature) as ParseAbiItem<signature>
|
|
78
|
+
else {
|
|
79
|
+
const structs = parseStructs(signature as readonly string[])
|
|
80
|
+
const length = signature.length as number
|
|
81
|
+
for (let i = 0; i < length; i++) {
|
|
82
|
+
const signature_ = (signature as readonly string[])[i]!
|
|
83
|
+
if (isStructSignature(signature_)) continue
|
|
84
|
+
abiItem = parseSignature(signature_, structs) as ParseAbiItem<signature>
|
|
85
|
+
break
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (!abiItem) throw new InvalidAbiItemError({ signature })
|
|
90
|
+
return abiItem as ParseAbiItem<signature>
|
|
91
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { expectTypeOf, test } from 'vp/test'
|
|
2
|
+
|
|
3
|
+
import type { AbiParameter } from 'abitype'
|
|
4
|
+
import type { ParseAbiParameter } from './parseAbiParameter.js'
|
|
5
|
+
import { parseAbiParameter } from './parseAbiParameter.js'
|
|
6
|
+
|
|
7
|
+
test('ParseAbiParameter', () => {
|
|
8
|
+
expectTypeOf<ParseAbiParameter<''>>().toEqualTypeOf<never>()
|
|
9
|
+
expectTypeOf<ParseAbiParameter<[]>>().toEqualTypeOf<never>()
|
|
10
|
+
expectTypeOf<
|
|
11
|
+
ParseAbiParameter<['struct Foo { string name; }']>
|
|
12
|
+
>().toEqualTypeOf<never>()
|
|
13
|
+
|
|
14
|
+
// string
|
|
15
|
+
expectTypeOf<ParseAbiParameter<'address from'>>().toEqualTypeOf<{
|
|
16
|
+
readonly type: 'address'
|
|
17
|
+
readonly name: 'from'
|
|
18
|
+
}>()
|
|
19
|
+
expectTypeOf<ParseAbiParameter<'address indexed from'>>().toEqualTypeOf<{
|
|
20
|
+
readonly type: 'address'
|
|
21
|
+
readonly name: 'from'
|
|
22
|
+
readonly indexed: true
|
|
23
|
+
}>()
|
|
24
|
+
expectTypeOf<ParseAbiParameter<'address calldata foo'>>().toEqualTypeOf<{
|
|
25
|
+
readonly type: 'address'
|
|
26
|
+
readonly name: 'foo'
|
|
27
|
+
}>()
|
|
28
|
+
|
|
29
|
+
// Array
|
|
30
|
+
expectTypeOf<
|
|
31
|
+
ParseAbiParameter<['Foo', 'struct Foo { string name; }']>
|
|
32
|
+
>().toEqualTypeOf<{
|
|
33
|
+
readonly type: 'tuple'
|
|
34
|
+
readonly components: readonly [
|
|
35
|
+
{
|
|
36
|
+
readonly name: 'name'
|
|
37
|
+
readonly type: 'string'
|
|
38
|
+
},
|
|
39
|
+
]
|
|
40
|
+
}>()
|
|
41
|
+
|
|
42
|
+
expectTypeOf<ParseAbiParameter<'(string bar) foo'>>().toEqualTypeOf<{
|
|
43
|
+
readonly type: 'tuple'
|
|
44
|
+
readonly components: readonly [
|
|
45
|
+
{
|
|
46
|
+
readonly type: 'string'
|
|
47
|
+
readonly name: 'bar'
|
|
48
|
+
},
|
|
49
|
+
]
|
|
50
|
+
readonly name: 'foo'
|
|
51
|
+
}>()
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
test('parseAbiParameter', () => {
|
|
55
|
+
// @ts-expect-error empty array not allowed
|
|
56
|
+
expectTypeOf(parseAbiParameter([])).toEqualTypeOf<never>()
|
|
57
|
+
expectTypeOf(
|
|
58
|
+
parseAbiParameter(['struct Foo { string name; }']),
|
|
59
|
+
).toEqualTypeOf<never>()
|
|
60
|
+
|
|
61
|
+
expectTypeOf(parseAbiParameter('(string)')).toEqualTypeOf<{
|
|
62
|
+
readonly type: 'tuple'
|
|
63
|
+
readonly components: readonly [{ readonly type: 'string' }]
|
|
64
|
+
}>()
|
|
65
|
+
|
|
66
|
+
const param: string = 'address'
|
|
67
|
+
expectTypeOf(parseAbiParameter(param)).toEqualTypeOf<AbiParameter>()
|
|
68
|
+
})
|