|
|
2 dni temu | |
|---|---|---|
| .. | ||
| bin | 14e1614e23 Include CLI in main Codama library (#777) | 3 miesięcy temu |
| src | 14e1614e23 Include CLI in main Codama library (#777) | 3 miesięcy temu |
| test | ce4936c031 Allow passing NodeStacks to nested visitors (#285) | 1 rok temu |
| .gitignore | 092b55b7f3 Design an empty monorepo setup (#1) | 1 rok temu |
| .prettierignore | 760dda5775 Inline scripts in packages (#842) | 2 miesięcy temu |
| CHANGELOG.md | 36df852972 [1.x] Publish packages (#916) | 2 dni temu |
| LICENSE | 1794ecdd3f Update license dates (#835) | 2 miesięcy temu |
| README.md | 159c18856d Fix CI (#330) | 11 miesięcy temu |
| package.json | 36df852972 [1.x] Publish packages (#916) | 2 dni temu |
| tsconfig.declarations.json | 092b55b7f3 Design an empty monorepo setup (#1) | 1 rok temu |
| tsconfig.json | 760dda5775 Inline scripts in packages (#842) | 2 miesięcy temu |
| tsup.config.ts | 760dda5775 Inline scripts in packages (#842) | 2 miesięcy temu |
| vitest.config.mts | 760dda5775 Inline scripts in packages (#842) | 2 miesięcy temu |
This package is the main library for Codama. It re-exports most of the other packages in the Codama monorepo and offers a Codama type with a few helpers to help bind everything together.
pnpm install codama
This package includes the following packages. Note that some of them also re-export other packages.
Additionally, this package offers a Codama type and a few helper functions to help you work with Codama IDLs.
CodamaThe Codama interface wraps a RootNode and offers some helper methods to work with it.
export interface Codama {
accept<T>(visitor: Visitor<T>): T;
clone(): Codama;
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 Codama IDL in the console.
codama.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".
codama.update(deleteNodesVisitor(['[accountNode]mint']));
// Transform all number nodes into u64 number nodes.
codama.update(
bottomUpTransformerVisitor([
{
select: '[numberTypeNode]',
transform: () => numberTypeNode(u64),
},
]),
);
Other helper functions include:
clone(): Creates a new instance of the Codama interface with a deep copy of the wrapped RootNode.getJson(): Returns the JSON representation of the Codama IDL.getRoot(): Returns the wrapped RootNode.
const clonedCodama = codama.clone();
const jsonIdl = codama.getJson();
const rootNode = codama.getRoot();
createFromRoot(rootNode)The createFromRoot function creates a new instance of the Codama interface from a RootNode.
const codama = createFromRoot(rootNode(programNode({ ... })));
createFromJson(jsonIdl)The createFromJson function creates a new instance of the Codama interface from a JSON representation of a RootNode.
const json: string = fs.readFileSync('path/to/codamaIdl.json', 'utf-8');
const codama = createFromJson(json);