Skip to main content

statica/
lib.rs

1//! statica — discover → pre → parse → layout → funnel → expand → bind → scope → emit
2//!
3//! # Pipeline
4//!
5//! 1. **Discover** — every `**/index.html` under the site root (`[param]` → collection).
6//! 2. **Pre** — authoring HTML normalization before html5ever (e.g. `<slot>` in `<select>`).
7//! 3. **Parse** — html5ever → owned AST; post-parse authoring lower (carriers → slots).
8//! 4. **Layout** — project page head/body content into `rel="statica/layout"` shells.
9//! 5. **Funnel** — load `<link rel="statica/data">` sources (JSON, JSONL/NDJSON, CSV, text, Markdown).
10//! 6. **Expand** — static (1:1), collection (1:N items), or pagination (1:N page chunks).
11//! 7. **Bind** — slots + `${…}` attrs + `data-t` / `data-t-{attr}` i18n + fragment/`data-each` expansion + form wiring.
12//! 8. **Scope** — hash-scoped CSS/JS for fragments (CSS via lightningcss + `[data-s]`).
13//! 9. **Emit** — write HTML; transform CSS to browser-ready; optional asset process + responsive images; sitemap / RSS / web manifest.
14//! 10. **Minify** — optional final pass on HTML, CSS, and JS in `out_dir`.
15//!
16//! The `statica` CLI owns end-user config (`statica.toml`) and maps it into
17//! [`BuildOptions`]. This crate does not read config files.
18//!
19//! # See also
20//!
21//! - `docs/guide.md` — authoring + config reference
22//! - [`paginate`] — UI list pagination page objects
23//! - [`feeds`] — sitemap + RSS (via `sitemap-rs` / `rss`)
24//! - [`manifest`] — web app manifest scaffold + automatic PWA head tags
25
26#![warn(clippy::pedantic)]
27#![allow(
28    clippy::module_name_repetitions,
29    clippy::missing_errors_doc,
30    clippy::missing_panics_doc,
31    clippy::must_use_candidate,
32    clippy::return_self_not_must_use,
33    clippy::wildcard_imports,
34    clippy::struct_excessive_bools,
35    clippy::too_many_arguments,
36    clippy::too_many_lines,
37    clippy::similar_names,
38    clippy::doc_markdown,
39    clippy::doc_link_with_quotes,
40    clippy::needless_raw_string_hashes,
41    clippy::items_after_test_module,
42    clippy::items_after_statements,
43    clippy::manual_let_else
44)]
45
46mod aliases;
47mod assets;
48mod bind;
49mod build;
50mod build_log;
51mod content;
52mod context;
53pub mod css;
54mod discover;
55mod emit;
56mod error;
57mod feeds;
58mod font;
59mod forms;
60mod fragment;
61mod funnel;
62mod i18n;
63mod images;
64mod layout;
65mod loc;
66mod manifest;
67mod minify;
68mod paginate;
69pub mod parse;
70mod render;
71mod runtime;
72mod scope;
73mod search;
74mod tokens;
75
76pub use aliases::{
77    join_alias, resolve_local_href, resolve_path, resolve_paths_in_document, AliasOptions,
78    AliasTarget, LocalAlias, ResolvedAlias, UrlAlias,
79};
80pub use assets::AssetProcessOptions;
81pub use build::{
82    build, rebuild_paths, BuildOptions, BuildPhase, BuildReport, BuildRouteKind, BuildRouteRow,
83    RenderMode,
84};
85pub use build_log::BuildLog;
86pub use css::{transform_and_scope, transform_css};
87pub use discover::PageKind;
88pub use error::{Error, Result};
89pub use feeds::{RssOptions, SitemapOptions};
90pub use forms::{FormProvider, FormsOptions};
91pub use i18n::{I18nCatalogs, I18nOptions, A11Y_TRANSLATABLE_ATTRS, DATA_T_ATTR_PREFIX};
92pub use images::{ImageManifest, ImageProcessOptions, ResponsiveImage};
93pub use loc::Diagnostic;
94pub use manifest::{ManifestMeta, MANIFEST_FILE, MANIFEST_HREF};
95pub use minify::{MinifyKind, MinifyOptions, MinifyReport};
96pub use paginate::PaginationRule;
97pub use parse::Document;
98pub use runtime::STATICA_JS;
99pub use search::SearchOptions;