-
-
Notifications
You must be signed in to change notification settings - Fork 75
/
Copy pathindex.cjs
1 lines (1 loc) · 1.71 KB
/
index.cjs
1
"use strict";var e=require("postcss-value-parser");const creator=t=>{const o=Object.assign({functionName:"csstools-if"},t);return{postcssPlugin:"postcss-conditional-values",prepare(){const t=new Map,r=new Set,s=new Set;return{Declaration(n,{postcss:a}){if(!n.value.toLowerCase().includes(o.functionName))return;const u=e(n.value);let i="";const l=[];let c=!1;const p=[];if(u.walk((t=>{if("function"===t.type&&t.nodes&&t.value.toLowerCase()===o.functionName)return t.nodes.forEach((t=>{i||"word"!==t.type||"--"!==t.value.slice(0,2)?i&&("word"!==t.type||"else"!==t.value?c?c&&p.push(t):l.push(t):c=!0):i=e.stringify(t).trim()})),!1})),!i)return;if(l.some((e=>"div"===e.type&&","===e.value)))return;if(p.some((e=>"div"===e.type&&","===e.value)))return;const d=e.stringify(l).trim(),f=e.stringify(p).trim();if(d&&f){{const r=t.get(i)||0;t.set(i,r+1);const s=`${i}--${r}`;n.cloneBefore({prop:s,value:`var(${i}) ${f}`}),u.walk((t=>{if("function"===t.type&&t.nodes&&t.value.toLowerCase()===o.functionName)return t.value="var",t.nodes=[...e(s).nodes,{sourceIndex:0,sourceEndIndex:1,value:",",type:"div",before:"",after:""},...e(d).nodes],!1})),n.cloneBefore({value:u.toString()})}if(!r.has(i)&&(n.root().walkDecls(i,(e=>{e.prop===i&&(""!==e.value.trim()?"true"===e.value.trim().toLowerCase()?e.value="initial":"false"===e.value.trim().toLowerCase()&&(e.value=" ",s.add(i)):s.add(i))})),r.add(i),!s.has(i))){let e;s.add(i),n.root().each((t=>{if("rule"===t.type&&":root"===t.selector)return e=t,!1})),e||(e=a.rule({selector:":root",source:n.source,raws:{before:"",after:"\n",between:" "}}),n.root().prepend(e));const t=a.decl({value:" ",prop:i,raws:{before:"\n\t"}});t.source=n.source,e.append(t)}n.remove()}}}}}};creator.postcss=!0,module.exports=creator;