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