tsv_ts 0.8.0

TypeScript/JS formatter, type stripper and acorn-compatible parser — part of tsv
Documentation

tsv_ts

TypeScript and JavaScript formatting, type stripping, and parsing to acorn-typescript's wire JSON — part of tsv (tsv.fuz.dev).

  • format formats one source; a Formatter formats many on one thread, keeping its arenas warm between calls.
  • strip erases the types, keeping every surviving character at its line and column.
  • parse_to_json parses to the wire JSON AST (the default json feature).
  • run_with_stack runs a call on a thread reserving STACK_SIZE, for a thread whose stack may be too small for the deepest input tsv accepts.
use tsv_ts::{Formatter, format, strip};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    assert_eq!(format("const x:number=42")?, "const x: number = 42;\n");
    let mut formatter = Formatter::new(); // warm arenas, for many sources on one thread
    assert_eq!(formatter.format("let y=1")?, "let y = 1;\n");
    assert_eq!(strip("let x: number = 1;")?.code, "let x         = 1;");
    Ok(())
}

This release exposes no AST: parsing returns the wire JSON — the AST as JSON in the canonical parser's shape (acorn-typescript's), its start / end UTF-16 offsets, span-only by default (no loc; the locations feature adds it), unlike an error's span(), a UTF-8 byte range.

JSX and TSX are not supported: JSX is never read as JSX, so a source holding it fails to parse or is misread.

The formatter is non-configurable by design: Prettier's style with printWidth 100, tabs, single quotes, and no trailing commas. Formatting output is not frozen: it changes between releases as formatting bugs are fixed.

API docs: docs.rs/tsv_ts.

Minimum supported Rust version: 1.94; raising it ships in a minor release. Release notes: CHANGELOG.md.

License: 0BSD