blitz_script/lib.rs
1//! JavaScript execution on top of Blitz
2//!
3//! This crate implements a [`ScriptDocument`]: a wrapper around a [`BaseDocument`](blitz_dom::BaseDocument)
4//! which can execute the JavaScript contained in (or referenced by) the document's `<script>` tags
5//! using the [Boa](https://boajs.dev) JavaScript engine, and which exposes JavaScript DOM APIs
6//! (`document`, elements, events, timers, etc) backed by `blitz-dom` to the scripts it runs.
7//!
8//! It is capable of running real-world JavaScript frameworks such as [Preact](https://preactjs.com/).
9//!
10//! ### Example
11//!
12//! ```rust
13//! use blitz_script::ScriptDocument;
14//! use blitz_dom::DocumentConfig;
15//!
16//! let mut doc = ScriptDocument::from_html(
17//! r#"
18//! <div id="root"></div>
19//! <script>
20//! const el = document.createElement("h1");
21//! el.textContent = "Hello from JS";
22//! document.getElementById("root").appendChild(el);
23//! </script>
24//! "#,
25//! DocumentConfig::default(),
26//! );
27//! doc.execute_scripts();
28//! ```
29
30#![allow(clippy::collapsible_if)]
31
32#[cfg(feature = "debug-control")]
33mod debug_control;
34mod document;
35mod dom;
36mod event_handler;
37mod fetch;
38mod runtime;
39pub mod script_stats;
40mod state;
41mod timers;
42
43#[cfg(feature = "debug-control")]
44pub use debug_control::DebugController;
45pub use document::ScriptDocument;
46pub use fetch::{DefaultScriptFetcher, FetchError, ScriptFetcher};