tauri-ts-generator 1.0.0

CLI tool to generate TypeScript bindings from Tauri commands
Documentation

tauri-ts-generator

CLI инструмент для автоматической генерации TypeScript биндингов из Tauri команд.

Описание

tauri-ts-generator сканирует ваш Rust код, находит все функции с макросом #[tauri::command] и автоматически генерирует:

  • TypeScript интерфейсы для Rust структур и перечислений
  • TypeScript функции-обёртки для вызова Tauri команд через invoke()

Это обеспечивает type-safe взаимодействие между TypeScript frontend и Rust backend, минимизируя ручное написание повторяющегося кода.

Установка

cargo install --path .

Или сборка из исходников:

cargo build --release

Быстрый старт

1. Инициализация конфигурации

cd your-tauri-project
tauri-ts-generator init

Это создаст файл tauri-codegen.toml с настройками по умолчанию.

2. Настройка конфигурации

Отредактируйте tauri-codegen.toml:

[input]
source_dir = "src-tauri/src"
exclude = ["tests", "target"]

[output]
types_file = "src/generated/types.ts"
commands_file = "src/generated/commands.ts"

[naming]
type_prefix = ""
type_suffix = ""
function_prefix = ""
function_suffix = ""

3. Генерация TypeScript кода

tauri-ts-generator generate

Или с подробным выводом:

tauri-ts-generator generate --verbose

Пример

Rust код (вход)

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
pub struct User {
    pub id: i32,
    pub name: String,
    pub email: Option<String>,
}

#[derive(Serialize, Deserialize)]
pub enum UserStatus {
    Active,
    Inactive,
    Pending,
}

#[tauri::command]
pub async fn get_user(id: i32) -> Result<User, String> {
    // ...
}

#[tauri::command]
pub async fn get_all_users() -> Result<Vec<User>, String> {
    // ...
}

#[tauri::command]
pub fn greet(name: String) -> String {
    format!("Hello, {}!", name)
}

TypeScript код (выход)

types.ts:

// This file was auto-generated by tauri-ts-generator
// Do not edit this file manually

export interface User {
  id: number;
  name: string;
  email: string | null;
}

export type UserStatus = "Active" | "Inactive" | "Pending";

commands.ts:

// This file was auto-generated by tauri-ts-generator
// Do not edit this file manually

import { invoke } from "@tauri-apps/api/core";
import type { User } from "./types";

export async function getUser(id: number): Promise<User> {
  return invoke<User>("get_user", { id });
}

export async function getAllUsers(): Promise<User[]> {
  return invoke<User[]>("get_all_users");
}

export async function greet(name: string): Promise<string> {
  return invoke<string>("greet", { name });
}

Маппинг типов

Базовые типы

Rust TypeScript
String, &str, char string
i8, i16, i32, i64, u8, u16, u32, u64 number
f32, f64 number
bool boolean
Vec<T> T[]
Option<T> T | null
Result<T, E> Promise<T>
HashMap<K, V> Record<K, V>
() void
Custom struct TypeScript interface
Simple enum String union type

Внешние типы (crates)

Rust TypeScript Описание
chrono::DateTime<Tz> string ISO 8601 формат
chrono::NaiveDateTime string ISO 8601 формат
chrono::NaiveDate string YYYY-MM-DD
chrono::NaiveTime string HH:MM:SS
time::OffsetDateTime string ISO 8601 формат
time::PrimitiveDateTime string ISO 8601 формат
uuid::Uuid string UUID строка
rust_decimal::Decimal string Числовая строка
std::path::PathBuf string Путь к файлу
url::Url string URL строка
std::net::IpAddr string IP адрес
std::time::Duration number Секунды
serde_json::Value unknown Любой JSON
bytes::Bytes number[] Массив байт
Complex enum Discriminated union

Конфигурация

[input]

Параметр Описание По умолчанию
source_dir Директория с Rust исходниками src-tauri/src
exclude Список директорий/файлов для исключения ["tests", "target"]

[output]

Параметр Описание По умолчанию
types_file Путь для генерации TypeScript типов src/generated/types.ts
commands_file Путь для генерации TypeScript команд src/generated/commands.ts

[naming]

Параметр Описание По умолчанию
type_prefix Префикс для имён типов ""
type_suffix Суффикс для имён типов ""
function_prefix Префикс для имён функций ""
function_suffix Суффикс для имён функций ""

CLI команды

tauri-ts-generator <COMMAND>

Commands:
  generate  Генерация TypeScript биндингов
  init      Создание файла конфигурации
  help      Справка

Options:
  -h, --help     Справка
  -V, --version  Версия

generate

tauri-ts-generator generate [OPTIONS]

Options:
  -c, --config <FILE>  Путь к файлу конфигурации [default: tauri-codegen.toml]
  -v, --verbose        Подробный вывод
  -h, --help           Справка

init

tauri-ts-generator init [OPTIONS]

Options:
  -o, --output <FILE>  Путь для создания конфигурации [default: tauri-codegen.toml]
  -f, --force          Перезаписать существующий файл
  -h, --help           Справка

Особенности

  • Автоматический парсинг — использует syn для анализа Rust AST
  • Поддержка async функций — корректно обрабатывает async/await
  • Пользовательские типы — парсит struct и enum с атрибутами #[derive(Serialize)]
  • serde rename — учитывает #[serde(rename = "...")]
  • Специальные типы Tauri — автоматически пропускает State, Window, AppHandle
  • Вложенные модули — сканирует команды внутри mod блоков

Лицензия

MIT