Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/salty-donuts-shout.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@solana/kit-plugin-litesvm': minor
'@solana/kit-client-litesvm': patch
---

Rename `litesvm` plugin to `litesvmConnection`.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ This repo provides the following individual plugin packages. You can learn more
| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`@solana/kit-plugin-rpc`](./packages/kit-plugin-rpc) | [![npm](https://img.shields.io/npm/v/@solana/kit-plugin-rpc.svg?style=flat)](https://www.npmjs.com/package/@solana/kit-plugin-rpc) | Connect to Solana clusters | `solanaRpc`, `solanaMainnetRpc`, `solanaDevnetRpc`, `solanaLocalRpc`, `rpcConnection`, `rpcSubscriptionsConnection`, `solanaRpcConnection`, `solanaRpcSubscriptionsConnection`, `rpcAirdrop`, `rpcGetMinimumBalance`, `rpcTransactionPlanner`, `rpcTransactionPlanExecutor` |
| [`@solana/kit-plugin-payer`](./packages/kit-plugin-payer) | [![npm](https://img.shields.io/npm/v/@solana/kit-plugin-payer.svg?style=flat)](https://www.npmjs.com/package/@solana/kit-plugin-payer) | Manage transaction fee payers | `payer`, `payerFromFile`, `generatedPayer`, `generatedPayerWithSol` |
| [`@solana/kit-plugin-litesvm`](./packages/kit-plugin-litesvm) | [![npm](https://img.shields.io/npm/v/@solana/kit-plugin-litesvm.svg?style=flat)](https://www.npmjs.com/package/@solana/kit-plugin-litesvm) | LiteSVM support | `litesvm`, `litesvmAirdrop`, `litesvmGetMinimumBalance`, `litesvmTransactionPlanner`, `litesvmTransactionPlanExecutor` |
| [`@solana/kit-plugin-litesvm`](./packages/kit-plugin-litesvm) | [![npm](https://img.shields.io/npm/v/@solana/kit-plugin-litesvm.svg?style=flat)](https://www.npmjs.com/package/@solana/kit-plugin-litesvm) | LiteSVM support | `litesvmConnection`, `litesvmAirdrop`, `litesvmGetMinimumBalance`, `litesvmTransactionPlanner`, `litesvmTransactionPlanExecutor` |
| [`@solana/kit-plugin-instruction-plan`](./packages/kit-plugin-instruction-plan) | [![npm](https://img.shields.io/npm/v/@solana/kit-plugin-instruction-plan.svg?style=flat)](https://www.npmjs.com/package/@solana/kit-plugin-instruction-plan) | Transaction planning and execution | `transactionPlanner`, `transactionPlanExecutor`, `planAndSendTransactions` |

## Community Plugins
Expand Down
4 changes: 2 additions & 2 deletions packages/kit-client-litesvm/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { createClient as createEmptyClient, TransactionSigner } from '@solana/kit';
import { planAndSendTransactions } from '@solana/kit-plugin-instruction-plan';
import {
litesvm,
litesvmAirdrop,
litesvmConnection,
litesvmGetMinimumBalance,
litesvmTransactionPlanExecutor,
litesvmTransactionPlanner,
Expand Down Expand Up @@ -55,7 +55,7 @@ export type {
*/
export function createClient(config: { payer?: TransactionSigner } = {}) {
return createEmptyClient()
.use(litesvm())
.use(litesvmConnection())
.use(litesvmAirdrop())
.use(litesvmGetMinimumBalance())
.use(payerOrGeneratedPayer(config.payer))
Expand Down
4 changes: 2 additions & 2 deletions packages/kit-plugin-airdrop/test/index.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { address, createClient, lamports, mainnet } from '@solana/kit';
import { litesvm } from '@solana/kit-plugin-litesvm';
import { litesvmConnection } from '@solana/kit-plugin-litesvm';
import { localhostRpc, rpc } from '@solana/kit-plugin-rpc';
import { describe, expect, it, vi } from 'vitest';

Expand Down Expand Up @@ -54,7 +54,7 @@ describe('airdrop', () => {

if (__NODEJS__) {
it('works with a LiteSVM instance', () => {
const client = createClient().use(litesvm()).use(airdrop());
const client = createClient().use(litesvmConnection()).use(airdrop());
expect(client).toHaveProperty('airdrop');
});
}
Expand Down
36 changes: 22 additions & 14 deletions packages/kit-plugin-litesvm/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,20 +15,20 @@ This package provides a plugin that adds LiteSVM functionality to your Kit clien
pnpm install @solana/kit-plugin-litesvm
```

## `litesvm` plugin
## `litesvmConnection` plugin

The LiteSVM plugin starts a new LiteSVM instance within your Kit client, allowing you to simulate Solana programs and accounts locally. Additionally, it derives a small RPC subset that interacts with the LiteSVM instance instead of making network requests.

> [!IMPORTANT]
> This plugin is only available in Node.js builds. Browser and React Native builds throw an error when calling `litesvm()`.
> This plugin is only available in Node.js builds. Browser and React Native builds throw an error when calling `litesvmConnection()`.

### Installation

```ts
import { createClient } from '@solana/kit';
import { litesvm } from '@solana/kit-plugin-litesvm';
import { litesvmConnection } from '@solana/kit-plugin-litesvm';

const client = createClient().use(litesvm());
const client = createClient().use(litesvmConnection());
```

### Features
Expand All @@ -49,13 +49,13 @@ This plugin adds an `airdrop` method to your Kit client that airdrops SOL using

### Installation

The client must have the `litesvm` plugin installed before applying this plugin.
The client must have the `litesvmConnection` plugin installed before applying this plugin.

```ts
import { createClient } from '@solana/kit';
import { litesvm, litesvmAirdrop } from '@solana/kit-plugin-litesvm';
import { litesvmConnection, litesvmAirdrop } from '@solana/kit-plugin-litesvm';

const client = createClient().use(litesvm()).use(litesvmAirdrop());
const client = createClient().use(litesvmConnection()).use(litesvmAirdrop());
```

### Features
Expand All @@ -71,13 +71,13 @@ This plugin adds a `getMinimumBalance` method to your Kit client that computes t

### Installation

The client must have the `litesvm` plugin installed before applying this plugin.
The client must have the `litesvmConnection` plugin installed before applying this plugin.

```ts
import { createClient } from '@solana/kit';
import { litesvm, litesvmGetMinimumBalance } from '@solana/kit-plugin-litesvm';
import { litesvmConnection, litesvmGetMinimumBalance } from '@solana/kit-plugin-litesvm';

const client = createClient().use(litesvm()).use(litesvmGetMinimumBalance());
const client = createClient().use(litesvmConnection()).use(litesvmGetMinimumBalance());
```

### Features
Expand All @@ -102,11 +102,15 @@ This plugin requires a payer to be set on the client or passed as an option.

```ts
import { createClient } from '@solana/kit';
import { litesvm, litesvmTransactionPlanner, litesvmTransactionPlanExecutor } from '@solana/kit-plugin-litesvm';
import {
litesvmConnection,
litesvmTransactionPlanner,
litesvmTransactionPlanExecutor,
} from '@solana/kit-plugin-litesvm';
import { generatedPayer } from '@solana/kit-plugin-payer';

const client = await createClient()
.use(litesvm())
.use(litesvmConnection())
.use(generatedPayer())
.use(litesvmTransactionPlanner())
.use(litesvmTransactionPlanExecutor());
Expand Down Expand Up @@ -134,11 +138,15 @@ This plugin requires an `svm` instance to be configured on the client.

```ts
import { createClient } from '@solana/kit';
import { litesvm, litesvmTransactionPlanner, litesvmTransactionPlanExecutor } from '@solana/kit-plugin-litesvm';
import {
litesvmConnection,
litesvmTransactionPlanner,
litesvmTransactionPlanExecutor,
} from '@solana/kit-plugin-litesvm';
import { generatedPayer } from '@solana/kit-plugin-payer';

const client = await createClient()
.use(litesvm())
.use(litesvmConnection())
.use(generatedPayer())
.use(litesvmTransactionPlanner())
.use(litesvmTransactionPlanExecutor());
Expand Down
8 changes: 4 additions & 4 deletions packages/kit-plugin-litesvm/src/airdrop.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,23 +18,23 @@ type LiteSVMClient = {
* underlying LiteSVM instance.
*
* The client must already have a `svm` property installed (e.g. via
* the {@link litesvm} plugin). The airdrop is executed synchronously
* the {@link litesvmConnection} plugin). The airdrop is executed synchronously
* against the in-process SVM and the resulting transaction signature
* is returned.
*
* @example
* ```ts
* import { createClient } from '@solana/kit';
* import { litesvm, litesvmAirdrop } from '@solana/kit-plugin-litesvm';
* import { litesvmConnection, litesvmAirdrop } from '@solana/kit-plugin-litesvm';
*
* const client = createClient()
* .use(litesvm())
* .use(litesvmConnection())
* .use(litesvmAirdrop());
*
* await client.airdrop(myAddress, lamports(1_000_000_000n));
* ```
*
* @see {@link litesvm}
* @see {@link litesvmConnection}
*/
export function litesvmAirdrop() {
return <T extends LiteSVMClient>(client: T) => {
Expand Down
8 changes: 4 additions & 4 deletions packages/kit-plugin-litesvm/src/get-minimum-balance.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,22 @@ type LiteSVMClient = {
* underlying LiteSVM instance.
*
* The client must already have a `svm` property installed (e.g. via
* the {@link litesvm} plugin). The balance is computed synchronously
* the {@link litesvmConnection} plugin). The balance is computed synchronously
* against the in-process SVM.
*
* @example
* ```ts
* import { createClient } from '@solana/kit';
* import { litesvm, litesvmGetMinimumBalance } from '@solana/kit-plugin-litesvm';
* import { litesvmConnection, litesvmGetMinimumBalance } from '@solana/kit-plugin-litesvm';
*
* const client = createClient()
* .use(litesvm())
* .use(litesvmConnection())
* .use(litesvmGetMinimumBalance());
*
* const balance = await client.getMinimumBalance(100);
* ```
*
* @see {@link litesvm}
* @see {@link litesvmConnection}
*/
export function litesvmGetMinimumBalance() {
return <T extends LiteSVMClient>(client: T) => {
Expand Down
6 changes: 3 additions & 3 deletions packages/kit-plugin-litesvm/src/index.browser.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
export type { FailedTransactionMetadata, TransactionMetadata } from 'litesvm';
export type { LiteSVM } from './litesvm';
export type { LiteSVM } from './litesvm-connection';
export type { LiteSvmRpcApi } from './litesvm-to-rpc';

export function litesvm(): <T extends object>(_client: T) => never {
export function litesvmConnection(): <T extends object>(_client: T) => never {
throw new Error(
'The `litesvm` plugin is unavailable in browser and react-native. ' +
'The `litesvmConnection` plugin is unavailable in browser and react-native. ' +
'Use this plugin in a node environment instead.',
);
}
Expand Down
2 changes: 1 addition & 1 deletion packages/kit-plugin-litesvm/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ export type { FailedTransactionMetadata, TransactionMetadata } from 'litesvm';

export * from './airdrop';
export * from './get-minimum-balance';
export * from './litesvm';
export * from './litesvm-connection';
export * from './litesvm-to-rpc';
export * from './transaction-error';
export * from './transaction-plan-executor';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { LiteSVM } from 'litesvm';

import { createRpcFromSvm } from './litesvm-to-rpc';

// Re-export the LiteSVM type to make the `litesvm` plugin type-portable.
// Re-export the LiteSVM type to make the `litesvmConnection` plugin type-portable.
export type { LiteSVM } from 'litesvm';

/**
Expand All @@ -17,10 +17,10 @@ export type { LiteSVM } from 'litesvm';
* @example
* ```ts
* import { createClient } from '@solana/kit';
* import { litesvm } from '@solana/kit-plugin-litesvm';
* import { litesvmConnection } from '@solana/kit-plugin-litesvm';
*
* // Install the LiteSVM plugin.
* const client = createClient().use(litesvm());
* const client = createClient().use(litesvmConnection());
*
* // Use LiteSVM to set up accounts and programs.
* client.svm.setAccount(myAccount);
Expand All @@ -30,7 +30,7 @@ export type { LiteSVM } from 'litesvm';
* const { value: latestBlockhash } = await client.rpc.getLatestBlockhash().send();
* ```
*/
export function litesvm() {
export function litesvmConnection() {
return <T extends object>(client: T) => {
const svm = new LiteSVM();
const rpc = createRpcFromSvm(svm);
Expand Down
4 changes: 2 additions & 2 deletions packages/kit-plugin-litesvm/src/transaction-plan-executor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ import { getSolanaErrorFromLiteSvmFailure, isFailedTransaction } from './transac
* @example
* ```ts
* import { createClient } from '@solana/kit';
* import { litesvm, litesvmTransactionPlanner, litesvmTransactionPlanExecutor } from '@solana/kit-plugin-litesvm';
* import { litesvmConnection, litesvmTransactionPlanner, litesvmTransactionPlanExecutor } from '@solana/kit-plugin-litesvm';
* import { generatedPayer } from '@solana/kit-plugin-payer';
*
* const client = await createClient()
* .use(litesvm())
* .use(litesvmConnection())
* .use(generatedPayer())
* .use(litesvmTransactionPlanner())
* .use(litesvmTransactionPlanExecutor());
Expand Down
4 changes: 2 additions & 2 deletions packages/kit-plugin-litesvm/src/transaction-planner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ import {
* @example
* ```ts
* import { createClient } from '@solana/kit';
* import { litesvm, litesvmTransactionPlanner, litesvmTransactionPlanExecutor } from '@solana/kit-plugin-litesvm';
* import { litesvmConnection, litesvmTransactionPlanner, litesvmTransactionPlanExecutor } from '@solana/kit-plugin-litesvm';
* import { generatedPayer } from '@solana/kit-plugin-payer';
*
* const client = await createClient()
* .use(litesvm())
* .use(litesvmConnection())
* .use(generatedPayer())
* .use(litesvmTransactionPlanner())
* .use(litesvmTransactionPlanExecutor());
Expand Down
4 changes: 2 additions & 2 deletions packages/kit-plugin-litesvm/test/airdrop.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { address, createClient, lamports } from '@solana/kit';
import { describe, expect, it, vi } from 'vitest';

import { litesvm, litesvmAirdrop } from '../src';
import { litesvmAirdrop, litesvmConnection } from '../src';

describe('litesvmAirdrop', () => {
it('provides an airdrop function that relies on a LiteSVM instance', async () => {
Expand Down Expand Up @@ -50,7 +50,7 @@ describe('litesvmAirdrop', () => {

if (__NODEJS__) {
it('works with a LiteSVM instance', async () => {
const client = createClient().use(litesvm()).use(litesvmAirdrop());
const client = createClient().use(litesvmConnection()).use(litesvmAirdrop());
expect(client).toHaveProperty('airdrop');

const receiver = address('HQVxiMVDoV9jzG4tpoxmDZsNfWvaHXm8DGGv93Gka75v');
Expand Down
4 changes: 2 additions & 2 deletions packages/kit-plugin-litesvm/test/get-minimum-balance.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { BASE_ACCOUNT_SIZE, createClient, lamports } from '@solana/kit';
import { describe, expect, it, vi } from 'vitest';

import { litesvm, litesvmGetMinimumBalance } from '../src';
import { litesvmConnection, litesvmGetMinimumBalance } from '../src';

// Default Solana rent: 3_480 lamports/byte/year * 2 years exemption threshold = 6_960 lamports/byte.
const LAMPORTS_PER_BYTE = 6_960n;
Expand Down Expand Up @@ -42,7 +42,7 @@ describe('litesvmGetMinimumBalance', () => {

if (__NODEJS__) {
it('works with a LiteSVM instance', async () => {
const client = createClient().use(litesvm()).use(litesvmGetMinimumBalance());
const client = createClient().use(litesvmConnection()).use(litesvmGetMinimumBalance());
expect(client).toHaveProperty('getMinimumBalance');

const balance = await client.getMinimumBalance(100);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@ import {
import { LiteSVM } from 'litesvm';
import { describe, expect, expectTypeOf, it } from 'vitest';

import { litesvm as nodeLitesvm } from '../src/index';
import { litesvm as browserLitesvm } from '../src/index.browser';
import { litesvmConnection as nodeLitesvm } from '../src/index';
import { litesvmConnection as browserLitesvm } from '../src/index.browser';
const litesvm = __NODEJS__ ? nodeLitesvm : browserLitesvm;

describe('litesvm', () => {
if (!__NODEJS__) {
it('throws in browser builds', () => {
expect(litesvm).toThrow('The `litesvm` plugin is unavailable in browser and react-native');
expect(litesvm).toThrow('The `litesvmConnection` plugin is unavailable in browser and react-native');
});
return;
}
Expand Down
6 changes: 3 additions & 3 deletions packages/kit-plugin-litesvm/test/litesvm-to-rpc.test.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { address, createClient, generateKeyPairSigner, lamports, Rpc } from '@solana/kit';
import { describe, expect, it } from 'vitest';

import { litesvm as nodeLitesvm } from '../src/index';
import { litesvm as browserLitesvm } from '../src/index.browser';
import { litesvmConnection as nodeLitesvm } from '../src/index';
import { litesvmConnection as browserLitesvm } from '../src/index.browser';
const litesvm = __NODEJS__ ? nodeLitesvm : browserLitesvm;

describe('createRpcFromSvm', () => {
if (!__NODEJS__) {
it('throws in browser builds', () => {
expect(litesvm).toThrow('The `litesvm` plugin is unavailable in browser and react-native');
expect(litesvm).toThrow('The `litesvmConnection` plugin is unavailable in browser and react-native');
});
return;
}
Expand Down
Loading
Loading