- Added `visibleWidth()` function to measure visible text width while excluding ANSI codes. - Optimized text processing from UTF-8 to UTF-16 implementation with direct JsString handling for improved performance. - Refactored ANSI state tracking to use bitflags-based SgrState struct instead of individual boolean fields for more efficient storage. - Introduced ColorCode enum to represent color codes (Basic, Indexed, Rgb) for better type safety. - Added comprehensive test coverage for UTF-16 text processing, ANSI detection, and width calculations. - Updated napi feature from 'napi8' to 'napi10' and added unicode-segmentation dependency.
@oh-my-pi/pi-natives
Native Rust functionality via N-API.
What's Inside
- Grep: Regex-based search powered by ripgrep's engine with native file walking and matching
- Find: Glob-based file/directory discovery with gitignore support (pure TypeScript via
globPaths) - Image: Image processing via photon-rs (resize, format conversion) exposed through N-API
Usage
import { grep, find, PhotonImage, resize, SamplingFilter } from "@oh-my-pi/pi-natives";
// Grep for a pattern
const results = await grep({
pattern: "TODO",
path: "/path/to/project",
glob: "*.ts",
context: 2,
});
// Find files
const files = await find({
pattern: "*.rs",
path: "/path/to/project",
fileType: "file",
});
// Image processing
using image = await PhotonImage.new_from_byteslice(bytes);
using resized = await resize(image, 800, 600, SamplingFilter.Lanczos3);
const pngBytes = await resized.get_bytes();
Building
# Build native addon from workspace root (requires Rust)
bun run build:native
# Type check
bun run check
Architecture
crates/pi-natives/ # Rust source (workspace member)
src/lib.rs # N-API exports
src/image.rs # Image processing (photon-rs)
Cargo.toml # Rust dependencies
native/ # Native addon binaries
pi_natives.<platform>-<arch>.node
pi_natives.node
src/ # TypeScript wrappers
native.ts # Native addon loader
index.ts # Public API