tailwind_rs_postcss/
lib.rs1pub mod engine;
40pub mod ast;
41pub mod parser;
42pub mod transformer;
43pub mod js_bridge;
44pub mod plugin_loader;
45pub mod source_map;
46pub mod error;
47pub mod test_integration;
48pub mod tailwind_processor;
49pub mod purger;
50pub mod autoprefixer;
51pub mod import_processor;
52pub mod css_optimizer;
53pub mod enhanced_plugin_loader;
54pub mod advanced_features;
55
56pub use engine::{PostCSSEngine, PostCSSConfig, ProcessedCSS};
58pub use ast::{CSSNode, CSSRule, CSSDeclaration, CSSAtRule};
59pub use parser::{CSSParser, ParseOptions};
60pub use transformer::{CSSTransformer, TransformOptions};
61pub use js_bridge::{JSBridge, JSRuntime};
62pub use plugin_loader::{PluginLoader, PluginConfig, PluginResult};
63pub use source_map::{SourceMapGenerator, SourceMap};
64pub use error::{PostCSSError, Result};
65pub use tailwind_processor::{TailwindProcessor, TailwindConfig, ProcessingResult};
66pub use purger::{CSSPurger, PurgeConfig, PurgeResult, PurgeOptions};
67pub use autoprefixer::{Autoprefixer, AutoprefixerConfig, PrefixResult, PrefixOptions, PrefixStatistics};
68pub use import_processor::{ImportProcessor, ImportConfig, ImportResult, ImportOptions, ImportStatistics};
69pub use css_optimizer::{CSSOptimizer, OptimizationConfig, OptimizationResult, OptimizationMetrics};
70pub use enhanced_plugin_loader::{EnhancedPluginLoader, PluginInstance, PluginMetrics};
71pub use advanced_features::{CSSLinter, LinterConfig, LintResult, AdvancedSourceMapGenerator, PostCSSPerformanceMonitor, PostCSSDevTools};
72
73pub const VERSION: &str = env!("CARGO_PKG_VERSION");
75
76pub fn default_config() -> PostCSSConfig {
78 PostCSSConfig::default()
79}
80
81pub fn new_engine() -> Result<PostCSSEngine> {
83 PostCSSEngine::new(PostCSSConfig::default())
84}
85
86pub async fn process_css(input: &str) -> Result<ProcessedCSS> {
88 let engine = new_engine()?;
89 engine.process_css(input).await
90}
91
92#[cfg(test)]
93mod tests {
94 use super::*;
95
96 #[test]
97 fn test_version_constant() {
98 assert!(!VERSION.is_empty());
99 assert!(VERSION.chars().any(|c| c.is_ascii_digit()));
100 }
101
102 #[test]
103 fn test_default_config() {
104 let config = default_config();
105 assert!(config.plugins.is_empty());
106 assert!(config.source_map);
107 }
108
109 #[tokio::test]
110 async fn test_process_css() {
111 let input = ".test { color: red; }";
112 let result = process_css(input).await;
113 assert!(result.is_ok());
114
115 let css = result.unwrap();
116 assert!(css.css.contains(".test"));
117 assert!(css.css.contains("color: red"));
118 }
119}