browser-commander 0.17.0

Universal browser automation library that supports multiple browser engines with a unified API
Documentation
//! Puppeteer from Rust, typed, over the JavaScript CLI's generic bridge
//! (issue #108).
//!
//! Puppeteer exists only for Node.js, so [`PuppeteerBridge`] starts
//! `browser-commander serve --stdio` and works with Puppeteer's objects as
//! remote handles. [`api`] is generated by
//! `scripts/generate-puppeteer-bindings.mjs` from the declaration file that
//! puppeteer-core ships (`rust/protocol/puppeteer/api.json`): one struct per
//! Puppeteer class or interface, with a typed `async fn` for every method and
//! getter, own and inherited.
//!
//! ```no_run
//! # async fn demo() -> Result<(), browser_commander::puppeteer::BridgeError> {
//! use browser_commander::puppeteer::{BridgeOptions, JsFunction, PuppeteerBridge};
//! use serde_json::json;
//!
//! let bridge = PuppeteerBridge::launch(BridgeOptions::default()).await?;
//! let puppeteer = bridge.puppeteer().await?;
//! let browser = puppeteer.launch(Some(json!({ "headless": true }))).await?;
//! let page = browser.new_page(None).await?;
//! page.goto("https://example.com", None).await?;
//! let title = page.title().await?;
//! let sum = page.evaluate(JsFunction::source("(a, b) => a + b"), &[json!(1), json!(2)]).await?;
//! # let _ = (title, sum);
//! browser.close().await?;
//! bridge.close().await;
//! # Ok(())
//! # }
//! ```

pub mod bridge;

#[rustfmt::skip]
pub mod api;

pub use api::*;
pub use bridge::{
    binary, decode_handle, js_cli_path, options, BridgeClient, BridgeError, BridgeOptions,
    FromWire, JsFunction, PuppeteerBridge, Remote, RemoteHandle, Subscription, JS_CLI_ENV,
};