Skip to main content

omena_transform_passes/
lib.rs

1//! Transform pass registry and DAG planner for the post-v5 omena-css track.
2//!
3//! This crate consumes `omena-transform-cst` contracts. It does not duplicate
4//! transform metadata; its job is to register safe mutations, cascade-proven
5//! combinations, conservative lowerings, and emission boundaries as a
6//! DAG-respecting execution plan for downstream transform crates.
7
8pub use omena_cascade::CustomPropertyLeastFixedPointSummaryV0;
9
10mod domains;
11mod helpers;
12mod model;
13mod registry;
14mod runtime;
15
16pub use domains::css_modules_values::resolve_static_css_modules_local_value_resolutions_from_source;
17pub use domains::number::reduce_static_numeric_expression;
18pub use model::*;
19pub use registry::{
20    inline_css_imports, inline_css_imports_for_static_module_evaluation,
21    parse_static_css_cascade_value, restore_less_inline_literal_placeholders,
22    summarize_static_css_custom_property_fixed_point_from_source,
23};
24#[cfg(feature = "lawvere-trace")]
25pub use runtime::executor::{
26    evaluate_lawvere_reorderability_with_differential_corpus,
27    execute_transform_passes_on_source_with_lawvere_trace,
28    execute_transform_passes_on_source_with_lawvere_trace_and_dialect,
29};
30pub use runtime::executor::{
31    execute_transform_passes_on_source, execute_transform_passes_on_source_with_dialect,
32    execute_transform_passes_on_source_with_dialect_and_context,
33};
34pub use runtime::fuzz::{run_transform_cascade_safe_fuzz_case, run_transform_fuzz_seed_corpus};
35pub use runtime::incremental::{
36    execute_transform_passes_incremental_with_database, transform_pass_incremental_graph_input,
37};
38#[cfg(feature = "lawvere-trace")]
39pub use runtime::planner::plan_transform_passes_parallel_lawvere_layers;
40pub use runtime::planner::{
41    implemented_mutation_pass_ids, plan_transform_passes, summarize_omena_transform_passes_boundary,
42};
43
44/// Expand a CSS Nesting selector against its canonical parent selector.
45///
46/// This is exposed for analysis/query layers that must compare selectors in
47/// their resolved form without running the full transform pipeline.
48pub fn expand_css_nested_selector(parent_selector: &str, nested_selector: &str) -> Option<String> {
49    domains::nesting::expand_nested_selector(parent_selector, nested_selector)
50}
51
52#[cfg(test)]
53mod tests;