fob-gen 0.2.1

Ergonomic JavaScript code generation using OXC AST builders
Documentation

Ergonomic JavaScript code generation using OXC AST builders

This crate provides a high-level, type-safe API for generating JavaScript code using the OXC (Oxidation Compiler) AST infrastructure.

Features

  • Type-safe AST building - Leverage Rust's type system for correct JavaScript generation
  • Zero-copy string handling - Efficient string interning via OXC's Atom
  • Ergonomic API - Intuitive method names that mirror JavaScript syntax
  • Full module support - Generate imports, exports, and ES modules
  • Modern JS features - Arrow functions, template literals, destructuring, and more

Examples

Basic Usage

use fob_gen::JsBuilder;
use oxc_allocator::Allocator;
use oxc_ast::ast::Statement;

let allocator = Allocator::default();
let js = JsBuilder::new(&allocator);

// Build: const x = 42;
let stmt = js.const_decl("x", js.number(42.0));

// Build: import React from 'react';
let import = js.import_default("React", "react");

// Generate code
let code = js.program(vec![
    Statement::from(import),
    stmt,
])?;
println!("{}", code);
# Ok::<(), fob_gen::GenError>(())

Building Complex Expressions

use fob_gen::JsBuilder;
use oxc_allocator::Allocator;

let allocator = Allocator::default();
let js = JsBuilder::new(&allocator);

// Build: console.log("Hello, world!")
let console_log = js.call(
    js.member(js.ident("console"), "log"),
    vec![js.arg(js.string("Hello, world!"))],
);
let stmt = js.expr_stmt(console_log);

let code = js.program(vec![stmt])?;
# Ok::<(), fob_gen::GenError>(())

Arrow Functions and Arrays

use fob_gen::JsBuilder;
use oxc_allocator::Allocator;

let allocator = Allocator::default();
let js = JsBuilder::new(&allocator);

// Build: const double = x => x * 2;
let arrow = js.arrow_fn(
    vec!["x"],
    js.binary(
        js.ident("x"),
        oxc_ast::ast::BinaryOperator::Multiplication,
        js.number(2.0),
    ),
);
let stmt = js.const_decl("double", arrow);

let code = js.program(vec![stmt])?;
# Ok::<(), fob_gen::GenError>(())