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)

[简体中文](README_zh.md)

Rust port of [@electron/asar](https://github.com/electron/asar) — create, extract, and inspect Electron ASAR archives with native performance. Provides both a library (`asar_rust`) and a CLI binary (`asar`).

## Installation

### CLI

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

### Library

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

## CLI Usage

```bash
# Pack a directory into an ASAR archive
asar pack ./my-app ./app.asar

# List all files in an archive
asar list ./app.asar

# List files with pack/unpack status
asar list ./app.asar --is-pack

# Extract a single file
asar extract-file ./app.asar package.json

# Extract entire archive
asar extract ./app.asar ./output-dir

# Pack with options
asar pack ./my-app ./app.asar \
  --unpack "*.node" \
  --unpack-dir "node_modules" \
  --exclude-hidden \
  --ordering ./ordering.txt
```

## Library API

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

// Create an ASAR archive
create_package("src_dir", "output.asar")?;

// Create with options
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)?;

// List all files
let files = list_package("output.asar", None)?;
for f in &files {
    println!("{f}");
}

// Extract a single file
extract_file("output.asar", "package.json", true)?;

// Extract entire archive
extract_all("output.asar", "dest_dir")?;

// Get raw header (JSON)
let header = get_raw_header("output.asar")?;

// Stat a file inside archive
let info = stat_file("output.asar", "src/main.js")?;
println!("size: {}", info.size);

// Open and inspect interactively
let archive = AsarArchive::open("output.asar")?;
```

## Features

- 📦 **Pack/Unpack** — Create ASAR archives from directories, extract fully or partially
- 📋 **List/Stat** — Inspect archive contents and file metadata
- 🔗 **Symlink Support** — Handle symbolic links within archives
- 🧩 **Unpacked Files** — Specify glob patterns for files/dirs to keep unpacked
-**Integrity** — SHA256-based header integrity verification
- 🔒 **Path Validation** — Prevent path traversal attacks
- 🚀 **Performance** — Optimized release profile (LTO, single codegen unit, size optimization)

## Compatibility

Compatible with ASAR archives generated by the Node.js `@electron/asar` package. Archives created by either tool can be read by the other.

## Minimum Supported Rust Version

Rust 1.85+ (2024 edition).

## License

MIT — see [LICENSE](LICENSE) for details.