kinobi
v0.22.0
Published
A Solana framework for building standardised programs
Downloads
1,036
Maintainers
Readme
Kinobi ➤ Main Library
This package is the main library for Kinobi. It re-exports most of the other packages in the Kinobi monorepo and offers a Kinobi
type with a few helpers to help bind everything together.
Installation
pnpm install kinobi
Packages included
This package includes the following packages. Note that some of them also re-export other packages.
The Kinobi helper
Additionally, this package offers a Kinobi
type and a few helper functions to help you work with Kinobi IDLs.
Kinobi
The Kinobi
interface wraps a RootNode
and offers some helper methods to work with it.
export interface Kinobi {
accept<T>(visitor: Visitor<T>): T;
clone(): Kinobi;
getJson(): string;
getRoot(): RootNode;
update(visitor: Visitor<Node | null>): void;
}
The accept
function allows us to visit the wrapped RootNode
using the provided visitor.
// Log the Kinobi IDL in the console.
kinobi.accept(consoleLogVisitor(getDebugStringVisitor({ indent: true })));
The update
function also accepts a visitor, but it uses the return value of that visitor to update the wrapped RootNode
. This means that, given a RootNode
, the provided visitor should also return a RootNode
. An error will be thrown otherwise.
// Delete account nodes named "mint".
kinobi.update(deleteNodesVisitor(['[accountNode]mint']));
// Transform all number nodes into u64 number nodes.
kinobi.update(
bottomUpTransformerVisitor([
{
select: '[numberTypeNode]',
transform: () => numberTypeNode(u64),
},
]),
);
Other helper functions include:
clone()
: Creates a new instance of theKinobi
interface with a deep copy of the wrappedRootNode
.getJson()
: Returns the JSON representation of the Kinobi IDL.getRoot()
: Returns the wrappedRootNode
.
const clonedKinobi = kinobi.clone();
const jsonIdl = kinobi.getJson();
const rootNode = kinobi.getRoot();
createFromRoot(rootNode)
The createFromRoot
function creates a new instance of the Kinobi
interface from a RootNode
.
const kinobi = createFromRoot(rootNode(programNode({ ... })));
createFromJson(jsonIdl)
The createFromJson
function creates a new instance of the Kinobi
interface from a JSON representation of a RootNode
.
const json: string = fs.readFileSync('path/to/kinobiIdl.json', 'utf-8');
const kinobi = createFromJson(json);