@@ -496,6 +496,7 @@ struct Config {
496496 pub source_map : Option < bool > ,
497497 pub input_source_map : Option < String > ,
498498 pub drafts : Option < Drafts > ,
499+ pub non_standard : Option < NonStandard > ,
499500 pub css_modules : Option < CssModulesOption > ,
500501 pub analyze_dependencies : Option < AnalyzeDependenciesOption > ,
501502 pub pseudo_classes : Option < OwnedPseudoClasses > ,
@@ -540,6 +541,7 @@ struct BundleConfig {
540541 pub minify : Option < bool > ,
541542 pub source_map : Option < bool > ,
542543 pub drafts : Option < Drafts > ,
544+ pub non_standard : Option < NonStandard > ,
543545 pub css_modules : Option < CssModulesOption > ,
544546 pub analyze_dependencies : Option < AnalyzeDependenciesOption > ,
545547 pub pseudo_classes : Option < OwnedPseudoClasses > ,
@@ -579,12 +581,20 @@ struct Drafts {
579581 custom_media : bool ,
580582}
581583
584+ #[ derive( Serialize , Debug , Deserialize , Default ) ]
585+ #[ serde( rename_all = "camelCase" ) ]
586+ struct NonStandard {
587+ #[ serde( default ) ]
588+ deep_selector_combinator : bool ,
589+ }
590+
582591fn compile < ' i > (
583592 code : & ' i str ,
584593 config : & Config ,
585594 visitor : & mut Option < JsVisitor > ,
586595) -> Result < TransformResult < ' i > , CompileError < ' i , std:: io:: Error > > {
587596 let drafts = config. drafts . as_ref ( ) ;
597+ let non_standard = config. non_standard . as_ref ( ) ;
588598 let warnings = Some ( Arc :: new ( RwLock :: new ( Vec :: new ( ) ) ) ) ;
589599
590600 let filename = config. filename . clone ( ) . unwrap_or_default ( ) ;
@@ -602,6 +612,11 @@ fn compile<'i>(
602612 let mut flags = ParserFlags :: empty ( ) ;
603613 flags. set ( ParserFlags :: NESTING , matches ! ( drafts, Some ( d) if d. nesting) ) ;
604614 flags. set ( ParserFlags :: CUSTOM_MEDIA , matches ! ( drafts, Some ( d) if d. custom_media) ) ;
615+ flags. set (
616+ ParserFlags :: DEEP_SELECTOR_COMBINATOR ,
617+ matches ! ( non_standard, Some ( v) if v. deep_selector_combinator) ,
618+ ) ;
619+
605620 let mut stylesheet = StyleSheet :: parse_with (
606621 & code,
607622 ParserOptions {
@@ -714,9 +729,15 @@ fn compile_bundle<
714729
715730 let res = {
716731 let drafts = config. drafts . as_ref ( ) ;
732+ let non_standard = config. non_standard . as_ref ( ) ;
717733 let mut flags = ParserFlags :: empty ( ) ;
718734 flags. set ( ParserFlags :: NESTING , matches ! ( drafts, Some ( d) if d. nesting) ) ;
719735 flags. set ( ParserFlags :: CUSTOM_MEDIA , matches ! ( drafts, Some ( d) if d. custom_media) ) ;
736+ flags. set (
737+ ParserFlags :: DEEP_SELECTOR_COMBINATOR ,
738+ matches ! ( non_standard, Some ( v) if v. deep_selector_combinator) ,
739+ ) ;
740+
720741 let parser_options = ParserOptions {
721742 flags,
722743 css_modules : if let Some ( css_modules) = & config. css_modules {
0 commit comments