Skip to content
Closed
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
15 changes: 15 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
test/e2e/

.changeset/
.github/workflows/PULL_REQUEST_TEMPLATE.md

declarations/
dist/
doc/
lib/
test-ledger/
target/
CHANGELOG.md

pnpm-lock.yaml
pnpm-workspace.yaml
113 changes: 112 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,112 @@
# codama-dart
# Codama ➤ Renderers ➤ Dart

[![npm][npm-image]][npm-url]
[![npm-downloads][npm-downloads-image]][npm-url]

[npm-downloads-image]: https://img.shields.io/npm/dm/@limechain/renderers-dart.svg?style=flat
[npm-image]: https://img.shields.io/npm/v/@limechain/renderers-dart.svg?style=flat&label=%40limechain%2Frenderers-dart
[npm-url]: https://www.npmjs.com/package/@limechain/renderers-dart

This package generates Dart clients from your Codama IDLs. The generated clients are compatible with the [`solana` Dart package](https://pub.dev/packages/solana).

## 1. Pre-requisites

### 1.1 Install Codama

```
pnpm install -g codama
```

### 1.2. Install Dart

https://dart.dev/get-dart

## 2. Renderer Installation

```sh
pnpm install @limechain/renderers-dart
```

## 3. Usage

### 3.1. Add the following script into `codama.json`.

```json
{
"idl": "path/to/idl",
"before": [],
"scripts": {
"dart": [
{
"from": "@limechain/renderers-dart",
"args": [
"generated",
{
"libraryName": "myProject",
"deleteFolderBeforeRendering": true,
"formatCode": true
}
]
}
]
}
}
```

An object can be passed as a second argument to further configure the renderer. See the [Options](#options) section below for more details.

### 3.2. Run code generation

```sh
pnpm codama run dart
```

### 3.3. Run Dart Borsh code generation

```sh
cd generated
dart pub get
dart run build_runner build
```

## 4. Generated Output

The renderer generates a complete Dart package with the following structure:

```
lib/
├── lib.dart # Main library export file
|
├── accounts/ # Account data classes
├── instructions/ # Instruction functions
├── types/ # Custom type definitions
├── errors/ # Program error classes
├── pdas/ # PDA derivation functions
└── programs/ # Program constants and metadata
```

## 5. Features

- **Account Serialization/Deserialization**: Automatic Borsh serialization for all account types
- **Instruction Builders**: Type-safe instruction creation with automatic PDA resolution
- **PDA Derivation**: Automatic generation of PDA derivation functions
- **Error Handling**: Strongly-typed program error definitions
- **Type Safety**: Full Dart type safety with null safety support

## 6. Options

The `renderVisitor` accepts the following options.

| Name | Type | Default | Description |
| ----------------------------- | -------- | ------- | --------------------------------------------------------------- |
| `libraryName` | `string` | `'lib'` | The name of the generated Dart library. |
| `outputDirectory` | `string` | `'lib'` | The directory where generated files will be placed. |
| `deleteFolderBeforeRendering` | `bool` | `true` | Flag for deleting the output folder before generating it again. |
| `formatCode` | `bool` | `true` | Flag for formatting the Dart code after generation |

<hr/>
7 changes: 7 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import solanaConfig from '@solana/eslint-config-solana';
import { defineConfig } from 'eslint/config';

export default defineConfig([
{ ignores: ['**/dist/**', '**/e2e/**'] },
{ files: ['**/*.ts', '**/*.(c|m)?js'], extends: [solanaConfig] },
]);
53 changes: 53 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"name": "@limechain/renderers-dart",
"version": "1.0.0",
"description": "Dart renderer for Codama IDLs",
"exports": {
"types": "./dist/types/index.d.ts",
"import": "./dist/index.node.mjs",
"require": "./dist/index.node.cjs"
},
"main": "./dist/index.node.cjs",
"module": "./dist/index.node.mjs",
"types": "./dist/types/index.d.ts",
"type": "commonjs",
"files": [
"./dist/types",
"./dist/index.*"
],
"sideEffects": false,
"scripts": {
"build": "rimraf dist && tsup && tsc -p ./tsconfig.declarations.json",
"lint": "eslint . && prettier --check .",
"lint:fix": "eslint --fix . && prettier --write .",
"test:types": "tsc --noEmit"
},
"dependencies": {
"@codama/nodes": "^1.3.7",
"@codama/renderers-core": "^1.2.2",
"@codama/visitors-core": "^1.3.7"
},
"devDependencies": {
"@solana/eslint-config-solana": "^5.0.0",
"@solana/prettier-config-solana": "0.0.5",
"@types/node": "^24",
"eslint": "^9.35.0",
"prettier": "^3.6.2",
"tsup": "^8.5.0",
"typescript": "^5.9.2",
"rimraf": "6.0.1"
},
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/limechain/renderers-dart"
},
"bugs": {
"url": "https://github.com/limechain/renderers-dart/issues"
},
"engines": {
"node": ">=20.18.0"
},
"packageManager": "[email protected]",
"prettier": "@solana/prettier-config-solana"
}
Loading