asar-rust 0.1.0

Rust port of @electron/asar — create and extract Electron ASAR archives
Documentation
# asar-rust

[![Crates.io](https://img.shields.io/crates/v/asar-rust.svg)](https://crates.io/crates/asar-rust)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

[English](README.md)

[@electron/asar](https://github.com/electron/asar) 的 Rust 移植版本 — 以原生性能创建、提取和检查 Electron ASAR 归档文件。同时提供库(`asar_rust`)和命令行工具(`asar`)。

## 安装

### 命令行工具

```bash
cargo install asar-rust
```

### 

```toml
[dependencies]
asar-rust = "0.1"
```

## CLI 用法

```bash
# 将目录打包为 ASAR 归档
asar pack ./my-app ./app.asar

# 列出归档中的所有文件
asar list ./app.asar

# 列出文件及其打包/解包状态
asar list ./app.asar --is-pack

# 提取单个文件
asar extract-file ./app.asar package.json

# 提取整个归档
asar extract ./app.asar ./output-dir

# 带选项打包
asar pack ./my-app ./app.asar \
  --unpack "*.node" \
  --unpack-dir "node_modules" \
  --exclude-hidden \
  --ordering ./ordering.txt
```

## 库 API

```rust
use asar_rust::asar::*;

// 创建 ASAR 归档
create_package("src_dir", "output.asar")?;

// 带选项创建
let options = CreateOptions {
    dot: false,
    ordering: Some("ordering.txt".into()),
    unpack: Some("*.node".into()),
    unpack_dir: Some("node_modules".into()),
};
create_package_with_options("src_dir", "output.asar", options)?;

// 列出所有文件
let files = list_package("output.asar", None)?;
for f in &files {
    println!("{f}");
}

// 提取单个文件
extract_file("output.asar", "package.json", true)?;

// 提取整个归档
extract_all("output.asar", "dest_dir")?;

// 获取原始头部 JSON
let header = get_raw_header("output.asar")?;

// 查看归档内文件信息
let info = stat_file("output.asar", "src/main.js")?;
println!("大小: {}", info.size);

// 以交互方式打开和检查
let archive = AsarArchive::open("output.asar")?;
```

## 功能特性

- 📦 **打包/解包** — 从目录创建 ASAR 归档,支持完整或部分提取
- 📋 **列出/查询** — 查看归档内容及文件元数据
- 🔗 **符号链接支持** — 处理归档中的符号链接
- 🧩 **解包文件** — 通过 glob 模式指定需要保持解包状态的文件/目录
-**完整性校验** — 基于 SHA256 的头部完整性验证
- 🔒 **路径验证** — 防止路径穿越攻击
- 🚀 **高性能** — 优化的 release 编译配置(LTO、单 codegen 单元、体积优化)

## 兼容性

与 Node.js `@electron/asar` 包生成的 ASAR 归档完全兼容。任一工具创建的归档均可被另一方读取。

## 最低支持的 Rust 版本

Rust 1.85+(2024 edition)。

## 许可证

MIT — 详见 [LICENSE](LICENSE)。