unnestcss
Version:
A library for un-nesting CSS
3 lines (2 loc) • 4 kB
JavaScript
"use strict";var e=require(`./enum.cjs`),t=require(`./utility.cjs`),n=require(`./tokenizer.cjs`);const r=({value:t,root:n,parent:r,index:i,offset:a,rules:o,points:s,type:c,props:l,children:u,length:d,siblings:f,line:p,column:m})=>{let h=a-1,g=a===0?o:[``],_=g.length;for(let n=0,r=0;n<i;n++){let i=s[n],a=Math.abs(i),o=t.slice(h+1,a);h=a;for(let t=0;t<_;t++){let n=i>0?`${g[t]} ${o}`:o.replaceAll(e.AMPERSAND+e.FORM_FEED,g[t]);l[r]=n.trim(),r++}}return{value:t,root:n,parent:r,type:a===0?e.RULESET:c,props:l,children:u,length:d,siblings:f,line:p,column:m}},i=({value:t,root:n,parent:r,props:i,siblings:a,line:o,column:s})=>({value:t,root:n,parent:r,type:e.COMMENT,props:i,children:t.slice(2,-2),length:0,siblings:a,line:o,column:s}),a=({value:t,root:n,parent:r,length:i,siblings:a,line:o,column:s})=>({value:t,root:n,parent:r,type:e.DECLARATION,props:t.slice(0,i),children:t.slice(i+1,-1),length:i,siblings:a,line:o,column:s}),o=(s,{value:c=``,root:l=null,parent:u=null,rule:d=null,rules:f=[``],rulesets:p=[],pseudo:m=0,points:h=[0],declarations:g=p}={})=>{let _=0,v=0,y=m,b,x=0,S=1,C=!0,w=1,T=e.NULL_CHARACTER,E=e.NULL_CHARACTER,D=``,O=f,k=p,A=d,j=``;for(;C;)switch(E=T,T=s.next(),T){case e.LEFT_PARENTHESIS:if(j[y-1]===e.COLON){let t=s.delimit(T).replace(e.AMPERSAND,e.AMPERSAND+e.FORM_FEED);j+=t;let n=Math.abs(_?h[_-1]:0);j.indexOf(e.AMPERSAND+e.FORM_FEED,n)!==-1&&(w=-1);break}case e.DOUBLE_QUOTE:case e.SINGLE_QUOTE:case e.LEFT_SQUARE_BRACKET:j+=s.delimit(T);break;case e.HORIZONTAL_TAB:case e.LINE_FEED:case e.CARRIAGE_RETURN:case e.SPACE:j+=s.whitespace(E);break;case e.REVERSE_SOLIDUS:j+=s.escaping(s.position-1,7);continue;case e.SOLIDUS:switch(s.peek()){case e.ASTERISK:case e.SOLIDUS:g.push(i({value:s.commenter(s.next(),s.position),root:l,parent:u,props:s.character,siblings:g,line:s.line,column:s.column})),(n.token(t.charOr(E,e.START_OF_HEADING))===5||n.token(t.charOr(s.peek(),e.START_OF_HEADING))===5)&&j.length&&j.slice(-1)!==e.SPACE&&(j+=e.SPACE);break;default:j+=e.SOLIDUS}break;case t.charCodeFrom(123*S):h[_]=j.length*w,_++;case t.charCodeFrom(125*S):case e.SEMICOLON:case e.NULL_CHARACTER:switch(T){case e.NULL_CHARACTER:case e.RIGHT_CURLY_BRACKET:C=!1;case t.charCodeFrom(59+v):w===-1&&(j=j.replace(e.FORM_FEED,``)),x>0&&(j.length-y||S===0&&E===e.SOLIDUS)&&g.push(a(x>32?{value:j+e.SEMICOLON,root:d,parent:u,length:y-1,siblings:g,line:s.line,column:s.column}:{value:j.replace(e.SPACE,``)+e.SEMICOLON,root:d,parent:u,length:y-2,siblings:g,line:s.line,column:s.column}));break;case e.SEMICOLON:j+=e.SEMICOLON;default:if(O=[],k=[],p.push(A=r({value:j,root:l,parent:u,index:_,offset:v,rules:f,points:h,type:D,props:O,children:k,length:y,siblings:p,line:s.line,column:s.column})),T===e.LEFT_CURLY_BRACKET)if(v===0)o(s,{value:j,root:l,parent:A,rule:A,rules:O,rulesets:p,pseudo:y,points:h,declarations:k});else{switch(b){case`c`:if(j.slice(2,10)===`ontainer`)break;v=0;case`l`:if(j.slice(2,6)===`ayer`)break;v=0;case`d`:case`m`:case`s`:break;default:v=0}v?(d&&(O=[],k.push(r({value:c,root:A,parent:A,index:0,offset:0,rules:f,points:h,type:D,props:f,children:O,length:y,siblings:k,line:s.line,column:s.column}))),o(s,{value:c,root:A,parent:A,rule:k,rules:f,rulesets:k,pseudo:y,points:h,declarations:d?O:k})):o(s,{value:j,root:A,parent:A,rule:A,rulesets:k,points:h,declarations:k})}}_=v=x=0,S=w=1,D=j=``,y=m;break;case e.COLON:y=1+j.length,x=t.charCodeAt(E);default:if(S<1){if(T===e.LEFT_CURLY_BRACKET)S--;else if(T===e.RIGHT_CURLY_BRACKET&&(S++,S===1&&s.prev()===e.RIGHT_CURLY_BRACKET))continue}switch(j+=T,t.charCodeFrom(t.charCodeAt(T)*S)){case e.AMPERSAND:v>0?w=1:(j+=e.FORM_FEED,w=-1);break;case e.COMMA:h[_]=(j.length-1)*w,_++,w=1;break;case e.AT:s.peek()===e.MINUS&&(j+=s.delimit(s.next())),b=s.peek(),D=j+=s.identifier(s.position),v=y=D.length,T=e.UNDERSCORE;break;case e.MINUS:E===e.MINUS&&j.length===2&&(S=0)}}return p},s=e=>o(new n.Tokenizer(e));exports.comment=i,exports.compile=s,exports.declaration=a,exports.parse=o,exports.ruleset=r;
//# sourceMappingURL=parser.cjs.map