@eliseev_s/tolk-tlb-transpiler
Version:
Transpile Tolk structs to TLB definitions and generate TypeScript wrappers for TON blockchain smart contracts
243 lines (175 loc) • 5.34 kB
Markdown
A powerful tool for transpiling Tolk structs to TLB (Type Language Binary) definitions and generating TypeScript wrappers for TON blockchain smart contracts.
## Features
- 🔄 **TLB Transpilation**: Convert Tolk structs to TLB schema definitions
- 🎯 **TypeScript Wrapper Generation**: Generate complete smart contract wrappers
- 🛠️ **CLI & API**: Use via command line or programmatic API
- 📦 **Type Safety**: Full TypeScript support with type definitions
## Installation
```bash
npm install -g @eliseev_s/tolk-tlb-transpiler
```
Or use directly:
```bash
npx tolk-tlb-transpiler --help
```
## CLI Usage
### Basic TLB Transpilation
```bash
# Transpile Tolk structs to TLB definitions
tolk-tlb transpile input.tolk
# Custom output directory
tolk-tlb transpile input.tolk -o ./output
# Skip TypeScript generation
tolk-tlb transpile input.tolk --no-ts
# Verbose output
tolk-tlb transpile input.tolk -v
```
### Smart Contract Wrapper Generation
```bash
# Generate TypeScript wrapper for smart contract
tolk-tlb wrapper structures.tolk get-methods.tolk MyContract
# Custom output directory
tolk-tlb wrapper structures.tolk get-methods.tolk MyContract -o ./output
# Custom file name
tolk-tlb wrapper structures.tolk get-methods.tolk MyContract -n contract-wrapper
# Verbose output
tolk-tlb wrapper structures.tolk get-methods.tolk MyContract -v
```
## Programmatic API
### Basic Transpilation
```typescript
import { transpileTolkToTlb, transpileTolkToTlbDefinitions } from 'tolk-tlb-transpiler';
const tolkCode = `
struct User {
id: uint64;
name: bytes;
active: bool;
}
`;
// Get formatted TLB string
const tlbString = await transpileTolkToTlb(tolkCode);
// Get TLB definitions array
const tlbDefinitions = await transpileTolkToTlbDefinitions(tolkCode);
```
```typescript
import { generateContractWrapper } from 'tolk-tlb-transpiler';
const structuresCode = `
struct MinterStorage {
counter: uint64;
owner: address;
}
struct IncrementMessage {
amount: uint32;
}
type MinterInternalMessage = IncrementMessage;
`;
const getMethodsCode = `
get counter(): uint64;
get owner(): address;
`;
const result = await generateContractWrapper(structuresCode, getMethodsCode, 'Minter');
// Access generated code
console.log(result.tlbString); // TLB definitions
console.log(result.typescriptCode); // TypeScript types
console.log(result.wrapperCode); // Contract wrapper class
console.log(result.fullCode); // Complete combined code
```
**Input (`user.tolk`):**
```tolk
struct User {
id: uint64;
data: cell;
active: bool;
}
```
**Output (`user.tlb`):**
```tlb
// User
user
```
**Input Files:**
`structures.tolk`:
```tolk
struct CounterStorage {
counter: uint64;
owner: address;
}
struct IncrementMessage {
amount: uint32;
}
type CounterInternalMessage = IncrementMessage;
```
`get-methods.tolk`:
```tolk
get counter(): uint64;
get owner(): address;
```
**Generated Wrapper:**
```typescript
export class Counter implements Contract {
constructor(readonly address: Address, readonly init?: { code: Cell; data: Cell }) {}
static createFromAddress(address: Address) {
return new Counter(address);
}
static createFromConfig(storage: CounterStorage, code: Cell, workchain = 0) {
const data = beginCell().store(storeCounterStorage(storage)).endCell();
const init = { code, data };
return new Counter(contractAddress(workchain, init), init);
}
async sendIncrement(
provider: ContractProvider,
via: Sender,
value: bigint,
params: OmitKind<IncrementMessage>
) {
await provider.internal(via, {
value,
sendMode: SendMode.PAY_GAS_SEPARATELY,
body: beginCell()
.store(storeIncrementMessage({ ...params, kind: 'IncrementMessage' }))
.endCell(),
});
}
async getCounter(provider: ContractProvider): Promise<bigint> {
const { stack } = await provider.get('counter', []);
return stack.readBigNumber();
}
async getOwner(provider: ContractProvider): Promise<Address> {
const { stack } = await provider.get('owner', []);
return stack.readAddress();
}
}
```
```bash
tolk-tlb --help
tolk-tlb --version
tolk-tlb transpile --help
tolk-tlb wrapper --help
```
- Node.js 16+
- TypeScript 5.0+ (for development)
- ✨ **New Feature**: Smart contract wrapper generation
- 🔧 **Enhancement**: Refactored `WrapperGenerator` to instance-based architecture
- 📝 **CLI**: Added `wrapper` command for generating TypeScript wrappers
- 🎯 **API**: Added `generateContractWrapper` function for programmatic usage
- 🛠️ **Architecture**: Improved code organization with factory pattern
- 🔄 Basic TLB transpilation from Tolk structs
- 🛠️ CLI support for transpilation
- 📦 TypeScript type generation
- 🎯 Programmatic API for transpilation
MIT