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
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
19 changes: 19 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.1.0] - 2025-01-27

- Initial release of Codama Dart renderer
- Support for generating Dart clients from Codama IDLs
- PDA (Program Derived Address) derivation functionality
- String serialization using raw UTF-8 encoding for PDA seeds
- Support for all Codama type nodes including
- Enum type generation with variant support
- Instruction function generation
- Account type generation
- Error type generation
- Dart pubspec.yaml generation with proper dependencies
111 changes: 110 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,110 @@
# 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/codama-dart.svg?style=flat
[npm-image]: https://img.shields.io/npm/v/@limechain/codama-dart.svg?style=flat&label=%40limechain%2Fcodama-dart
[npm-url]: https://www.npmjs.com/package/@limechain/codama-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/codama-dart
```

## 3. Usage

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

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

### 3.2. Run code generation

```sh
pnpm codama run dart
```

### 3.3. (Only if `generateBorsh` is set to `false`) 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/
└─ProgramName
├── 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 |
| ----------------------------- | ------ | ------- | --------------------------------------------------------------- |
| `deleteFolderBeforeRendering` | `bool` | `true` | Flag for deleting the output folder before generating it again. |
| `formatCode` | `bool` | `true` | Flag for formatting the Dart code after generation |
| `generateBorsh` | `bool` | `true` | Flag for running Borsh code generation after rendering |

<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] },
]);
69 changes: 69 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
{
"name": "@limechain/codama-dart",
"version": "0.1.0",
"description": "Solana Dart Client Generator, Powered by Codama",
"keywords": [
"codama",
"dart",
"renderer",
"solana",
"idl",
"code-generation"
],
"author": "LimeChain <[email protected]>",
"homepage": "https://github.com/limechain/codama-dart#readme",
"exports": {
"types": "./dist/types/index.d.ts",
"import": "./dist/index.node.mjs",
"require": "./dist/index.node.cjs"
},
"type": "commonjs",
"files": [
"./dist/types",
"./dist/index.*"
],
"sideEffects": false,
"publishConfig": {
"access": "public"
},
"scripts": {
"build": "rimraf dist && tsup && tsc -p ./tsconfig.declarations.json",
"lint": "eslint . && prettier --check .",
"lint:fix": "eslint --fix . && prettier --write .",
"test": "pnpm test:types && pnpm test:treeshakability && pnpm test:unit && pnpm test:exports",
"test:exports": "node ./test/exports/module.mjs && node ./test/exports/commonjs.cjs",
"test:treeshakability": "bash -c 'for file in dist/index.*.mjs; do agadoo $file; done'",
"test:types": "tsc --noEmit",
"test:unit": "vitest run"
},
"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",
"rimraf": "6.0.1",
"tsup": "^8.5.0",
"typescript": "^5.9.2",
"agadoo": "^3.0.0",
"vitest": "^4.0.3"
},
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/limechain/codama-dart"
},
"bugs": {
"url": "https://github.com/limechain/codama-dart/issues"
},
"engines": {
"node": ">=20.18.0"
},
"packageManager": "[email protected]",
"prettier": "@solana/prettier-config-solana"
}
Loading