@solana/accounts
Advanced tools
Comparing version 2.0.0-experimental.ef2569b to 2.0.0-experimental.f5d64e6
@@ -19,2 +19,17 @@ import { getBase64Encoder, getBase58Encoder } from '@solana/codecs-strings'; | ||
} | ||
function accountExists(account) { | ||
return !("exists" in account) || "exists" in account && account.exists; | ||
} | ||
function assertAccountDecoded(account) { | ||
if (accountExists(account) && account.data instanceof Uint8Array) { | ||
throw new Error(`Expected account [${account.address}] to be decoded.`); | ||
} | ||
} | ||
function assertAccountsDecoded(accounts) { | ||
const encoded = accounts.filter((a) => accountExists(a) && a.data instanceof Uint8Array); | ||
if (encoded.length > 0) { | ||
const encodedAddresses = encoded.map((a) => a.address).join(", "); | ||
throw new Error(`Expected accounts [${encodedAddresses}] to be decoded.`); | ||
} | ||
} | ||
function parseBase64RpcAccount(address, rpcAccount) { | ||
@@ -84,4 +99,4 @@ if (!rpcAccount) | ||
export { BASE_ACCOUNT_SIZE, assertAccountExists, assertAccountsExist, decodeAccount, fetchEncodedAccount, fetchEncodedAccounts, fetchJsonParsedAccount, fetchJsonParsedAccounts, parseBase58RpcAccount, parseBase64RpcAccount, parseJsonRpcAccount }; | ||
export { BASE_ACCOUNT_SIZE, assertAccountDecoded, assertAccountExists, assertAccountsDecoded, assertAccountsExist, decodeAccount, fetchEncodedAccount, fetchEncodedAccounts, fetchJsonParsedAccount, fetchJsonParsedAccounts, parseBase58RpcAccount, parseBase64RpcAccount, parseJsonRpcAccount }; | ||
//# sourceMappingURL=out.js.map | ||
//# sourceMappingURL=index.browser.js.map |
@@ -19,2 +19,17 @@ import { getBase64Encoder, getBase58Encoder } from '@solana/codecs-strings'; | ||
} | ||
function accountExists(account) { | ||
return !("exists" in account) || "exists" in account && account.exists; | ||
} | ||
function assertAccountDecoded(account) { | ||
if (accountExists(account) && account.data instanceof Uint8Array) { | ||
throw new Error(`Expected account [${account.address}] to be decoded.`); | ||
} | ||
} | ||
function assertAccountsDecoded(accounts) { | ||
const encoded = accounts.filter((a) => accountExists(a) && a.data instanceof Uint8Array); | ||
if (encoded.length > 0) { | ||
const encodedAddresses = encoded.map((a) => a.address).join(", "); | ||
throw new Error(`Expected accounts [${encodedAddresses}] to be decoded.`); | ||
} | ||
} | ||
function parseBase64RpcAccount(address, rpcAccount) { | ||
@@ -84,4 +99,4 @@ if (!rpcAccount) | ||
export { BASE_ACCOUNT_SIZE, assertAccountExists, assertAccountsExist, decodeAccount, fetchEncodedAccount, fetchEncodedAccounts, fetchJsonParsedAccount, fetchJsonParsedAccounts, parseBase58RpcAccount, parseBase64RpcAccount, parseJsonRpcAccount }; | ||
export { BASE_ACCOUNT_SIZE, assertAccountDecoded, assertAccountExists, assertAccountsDecoded, assertAccountsExist, decodeAccount, fetchEncodedAccount, fetchEncodedAccounts, fetchJsonParsedAccount, fetchJsonParsedAccounts, parseBase58RpcAccount, parseBase64RpcAccount, parseJsonRpcAccount }; | ||
//# sourceMappingURL=out.js.map | ||
//# sourceMappingURL=index.native.js.map |
@@ -19,2 +19,17 @@ import { getBase64Encoder, getBase58Encoder } from '@solana/codecs-strings'; | ||
} | ||
function accountExists(account) { | ||
return !("exists" in account) || "exists" in account && account.exists; | ||
} | ||
function assertAccountDecoded(account) { | ||
if (accountExists(account) && account.data instanceof Uint8Array) { | ||
throw new Error(`Expected account [${account.address}] to be decoded.`); | ||
} | ||
} | ||
function assertAccountsDecoded(accounts) { | ||
const encoded = accounts.filter((a) => accountExists(a) && a.data instanceof Uint8Array); | ||
if (encoded.length > 0) { | ||
const encodedAddresses = encoded.map((a) => a.address).join(", "); | ||
throw new Error(`Expected accounts [${encodedAddresses}] to be decoded.`); | ||
} | ||
} | ||
function parseBase64RpcAccount(address, rpcAccount) { | ||
@@ -84,4 +99,4 @@ if (!rpcAccount) | ||
export { BASE_ACCOUNT_SIZE, assertAccountExists, assertAccountsExist, decodeAccount, fetchEncodedAccount, fetchEncodedAccounts, fetchJsonParsedAccount, fetchJsonParsedAccounts, parseBase58RpcAccount, parseBase64RpcAccount, parseJsonRpcAccount }; | ||
export { BASE_ACCOUNT_SIZE, assertAccountDecoded, assertAccountExists, assertAccountsDecoded, assertAccountsExist, decodeAccount, fetchEncodedAccount, fetchEncodedAccounts, fetchJsonParsedAccount, fetchJsonParsedAccounts, parseBase58RpcAccount, parseBase64RpcAccount, parseJsonRpcAccount }; | ||
//# sourceMappingURL=out.js.map | ||
//# sourceMappingURL=index.node.js.map |
@@ -7,2 +7,8 @@ import type { Decoder } from '@solana/codecs-core'; | ||
export declare function decodeAccount<TData extends object, TAddress extends string = string>(encodedAccount: MaybeEncodedAccount<TAddress>, decoder: Decoder<TData>): MaybeAccount<TData, TAddress>; | ||
/** Asserts that an account has been decoded. */ | ||
export declare function assertAccountDecoded<TData extends object, TAddress extends string = string>(account: Account<TData | Uint8Array, TAddress>): asserts account is Account<TData, TAddress>; | ||
export declare function assertAccountDecoded<TData extends object, TAddress extends string = string>(account: MaybeAccount<TData | Uint8Array, TAddress>): asserts account is MaybeAccount<TData, TAddress>; | ||
/** Asserts that all accounts have been decoded. */ | ||
export declare function assertAccountsDecoded<TData extends object, TAddress extends string = string>(accounts: Account<TData | Uint8Array, TAddress>[]): asserts accounts is Account<TData, TAddress>[]; | ||
export declare function assertAccountsDecoded<TData extends object, TAddress extends string = string>(accounts: MaybeAccount<TData | Uint8Array, TAddress>[]): asserts accounts is MaybeAccount<TData, TAddress>[]; | ||
//# sourceMappingURL=decode-account.d.ts.map |
{ | ||
"name": "@solana/accounts", | ||
"version": "2.0.0-experimental.ef2569b", | ||
"version": "2.0.0-experimental.f5d64e6", | ||
"description": "Helpers for representing, fetching and decoding Solana accounts", | ||
@@ -49,8 +49,8 @@ "exports": { | ||
"dependencies": { | ||
"@solana/codecs-core": "2.0.0-experimental.ef2569b", | ||
"@solana/addresses": "2.0.0-experimental.ef2569b", | ||
"@solana/codecs-strings": "2.0.0-experimental.ef2569b", | ||
"@solana/rpc-core": "2.0.0-experimental.ef2569b", | ||
"@solana/rpc-transport": "2.0.0-experimental.ef2569b", | ||
"@solana/rpc-types": "2.0.0-experimental.ef2569b" | ||
"@solana/addresses": "2.0.0-experimental.f5d64e6", | ||
"@solana/codecs-core": "2.0.0-experimental.f5d64e6", | ||
"@solana/codecs-strings": "2.0.0-experimental.f5d64e6", | ||
"@solana/rpc-core": "2.0.0-experimental.f5d64e6", | ||
"@solana/rpc-transport": "2.0.0-experimental.f5d64e6", | ||
"@solana/rpc-types": "2.0.0-experimental.f5d64e6" | ||
}, | ||
@@ -57,0 +57,0 @@ "devDependencies": { |
@@ -270,1 +270,45 @@ [![npm][npm-image]][npm-url] | ||
``` | ||
### `assertAccountDecoded()` | ||
This function asserts that an account stores decoded data, ie not a Uint8Array. Note that it does not check the shape of the data matches the decoded type, only that it is not a Uint8Array. | ||
```ts | ||
type MyAccountData = { name: string; age: number }; | ||
const myAccount: Account<MyAccountData | Uint8Array, '1234..5678'>; | ||
assertAccountDecoded(myAccount); | ||
// now the account data can be used as MyAccountData | ||
account.data satisfies MyAccountData; | ||
``` | ||
This is particularly useful for narrowing the result of fetching a JSON parsed account. | ||
```ts | ||
const account: MaybeAccount<MockData | Uint8Array> = await fetchJsonParsedAccount<MockData>( | ||
rpc, | ||
'1234..5678' as Address, | ||
) | ||
assertAccountDecoded(account); | ||
// now we have a MaybeAccount<MockData> | ||
account satisfies MaybeAccount<MockData> | ||
``` | ||
### `assertAccountsDecoded` | ||
This function asserts that all input accounts store decoded data, ie not a Uint8Array. As with `assertAccountDecoded` it does not check the shape of the data matches the decoded type, only that it is not a Uint8Array. | ||
```ts | ||
type MyAccountData = { name: string; age: number }; | ||
const myAccounts: Account<MyAccountData | Uint8Array, Address>[]; | ||
assertAccountsDecoded(myAccounts); | ||
// now the account data can be used as MyAccountData | ||
for(const a of account) { | ||
account.data satisfies MyAccountData; | ||
} | ||
``` |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
153143
744
314
+ Added@solana/addresses@2.0.0-experimental.f5d64e6(transitive)
+ Added@solana/assertions@2.0.0-experimental.f5d64e6(transitive)
+ Added@solana/codecs-core@2.0.0-experimental.f5d64e6(transitive)
+ Added@solana/codecs-numbers@2.0.0-experimental.f5d64e6(transitive)
+ Added@solana/codecs-strings@2.0.0-experimental.f5d64e6(transitive)
+ Added@solana/rpc-core@2.0.0-experimental.f5d64e6(transitive)
+ Added@solana/rpc-transport@2.0.0-experimental.f5d64e6(transitive)
+ Added@solana/rpc-types@2.0.0-experimental.f5d64e6(transitive)
- Removed@solana/addresses@2.0.0-experimental.ef2569b(transitive)
- Removed@solana/assertions@2.0.0-experimental.ef2569b(transitive)
- Removed@solana/codecs-core@2.0.0-experimental.ef2569b(transitive)
- Removed@solana/codecs-numbers@2.0.0-experimental.ef2569b(transitive)
- Removed@solana/codecs-strings@2.0.0-experimental.ef2569b(transitive)
- Removed@solana/rpc-core@2.0.0-experimental.ef2569b(transitive)
- Removed@solana/rpc-transport@2.0.0-experimental.ef2569b(transitive)
- Removed@solana/rpc-types@2.0.0-experimental.ef2569b(transitive)