@@ -7,13 +7,13 @@ import { createCSSOM, elementsAreComparable, mergeElements, sanitizeElement } fr
77const parse = createParser ( { syntax : 'progressive' } ) ;
88
99class Rule {
10+ isImported : boolean ;
1011 rule : CSSStyleRule ;
11- sanitize : boolean ;
1212 selectorAst : AstSelector ;
1313
14- constructor ( rule : CSSStyleRule , sanitize = false ) {
14+ constructor ( rule : CSSStyleRule , isImported = false ) {
15+ this . isImported = isImported ;
1516 this . rule = rule ;
16- this . sanitize = sanitize ;
1717 this . selectorAst = parse ( rule . selectorText ) ;
1818 }
1919}
@@ -44,12 +44,12 @@ export async function cssToHtml (css: CSSRuleList | string, options: Partial<Opt
4444 const rules = new Array < Rule > ( ) ;
4545 const importSet = new Set < string > ( ) ;
4646
47- async function parseRules ( source : CSSRuleList , urlBase : string , sanitize ?: boolean ) : Promise < void > {
47+ async function parseRules ( source : CSSRuleList , urlBase : string , isImported = false ) : Promise < void > {
4848 let seenStyleRule = false ;
4949 for ( const rule of Object . values ( source ! ) ) {
5050 if ( rule instanceof CSSStyleRule ) {
5151 seenStyleRule = true ;
52- rules . push ( new Rule ( rule , sanitize ) ) ;
52+ rules . push ( new Rule ( rule , isImported ) ) ;
5353 }
5454 // Fetch the content of imported stylesheets.
5555 else if ( rule instanceof CSSImportRule && ! seenStyleRule && options . imports === 'include' ) {
@@ -60,23 +60,23 @@ export async function cssToHtml (css: CSSRuleList | string, options: Partial<Opt
6060 if ( resource . status !== 200 ) throw new Error ( `Response status for stylesheet "${ url . href } " was ${ resource . status } .` ) ;
6161 const text = await resource . text ( ) ;
6262 const importedRule = createCSSOM ( text ) ;
63- if ( importedRule ) await parseRules ( importedRule , url . href , options . sanitize === 'imports' ) ;
63+ if ( importedRule ) await parseRules ( importedRule , url . href , true ) ;
6464 }
6565 }
6666 }
6767 }
6868 await parseRules ( styleRules , window . location . href ) ;
6969
7070 // Populate the DOM.
71- for ( const { rule , sanitize , selectorAst } of rules ) {
71+ for ( const { isImported , rule , selectorAst } of rules ) {
7272 // Traverse each rule nest of the selector AST.
7373 for ( const r of selectorAst . rules ) {
7474 const nest = new Array < Descriptor > ( ) ;
7575 let invalidNest = false ;
7676 // Create a descriptor for each of the nested selectors.
7777 let next : AstRule | undefined = r ;
7878 do {
79- const descriptor = new Descriptor ( next , undefined , sanitize ) ;
79+ const descriptor = new Descriptor ( next , undefined , isImported , options . sanitize ) ;
8080 if ( descriptor . invalid ) {
8181 invalidNest = true ;
8282 next = undefined ;
0 commit comments