UNPKG

unplugin-jade-garden

Version:

Build tool plugin for creating CSS with Jade Garden

44 lines (37 loc) 3.67 kB
import{existsSync as j,mkdirSync as S,writeFileSync as h}from"fs";import{join as C}from"path";import{isEqual as O,kebabCase as N}from"es-toolkit";function g(n){var s,r,t="";if(typeof n=="string"||typeof n=="number")t+=n;else if(typeof n=="object")if(Array.isArray(n)){var e=n.length;for(s=0;s<e;s++)n[s]&&(r=g(n[s]))&&(t&&(t+=" "),t+=r)}else for(r in n)n[r]&&(t&&(t+=" "),t+=r);return t}function $(){for(var n,s,r=0,t="",e=arguments.length;r<e;r++)(n=arguments[r])&&(s=g(n))&&(t&&(t+=" "),t+=s);return t}import{createFilter as _}from"unplugin-utils";import{kebabCase as u}from"es-toolkit";var v=(n,s)=>{let r=u(n.name),t=n.base?` .${r} { @apply ${s(n.base)}; }`:"";if(n.compoundVariants)for(let e of n.compoundVariants){let o=Object.keys(e).filter(a=>a!=="class"&&a!=="className").map(a=>`.${r}.${r}__${u(a)}--${u(e[a])}`).join(`, `),c=s(e.class,e.className);o&&c.length&&(t+=`${t.length?` `:""} ${o} { @apply ${c}; }`)}if(n.variants)for(let e in n.variants){let o=n.variants[e];for(let c in o){let a=s(o[c]);a.length&&(t+=`${t.length?` `:""} .${r}.${r}__${u(e)}--${u(c)} { @apply ${a}; }`)}}return`@layer components { ${t} } `};import{kebabCase as l}from"es-toolkit";var V=(n,s)=>{let r=l(n.name),t="";if(n.compoundSlots)for(let e of n.compoundSlots){let o=Object.keys(e).filter(i=>i!=="slots"&&i!=="class"&&i!=="className").map(i=>`__${l(i)}--${l(e[i])}`).join(""),c=e.slots.map(i=>`.${r}--${l(String(i))}${o}`).join(`, `),a=s(e.class,e.className);a.length&&(t+=`${t.length?` `:""} ${c} { @apply ${a}; }`)}for(let e in n.slots){let o=s(n.slots[e]);o.length&&(t+=`${t.length?` `:""} .${r}--${l(e)} { @apply ${o}; }`)}if(n.compoundVariants){for(let e of n.compoundVariants)for(let o in n.slots)if(e.class?.[o]||e.className?.[o]){let c=`.${r}--${l(o)}`,a=Object.keys(e).filter(p=>p!=="class"&&p!=="className"&&p!==o).map(p=>`${c}__${l(p)}--${l(e[p])}`).join(""),i=s(e.class?.[o],e.className?.[o]);i.length&&(t+=`${t.length?` `:""} ${c}${a} { @apply ${i}; }`)}}if(n.variants)for(let e in n.variants){let o=n.variants[e];for(let c in o){let a=o[c];for(let i in a){let p=s(a[i]);if(!p.length)continue;let m=`.${r}--${l(i)}`;t+=`${t.length?` `:""} ${m}${m}__${l(e)}--${l(c)} { @apply ${p}; }`}}}return`@layer components { ${t} } `};var w=n=>{let s={entry:n?.entry??"",components:n?.components??{cva:[],sva:[]},mergeFn:n?.mergeFn??$},r=_(s.entry),t=new Map,e=o=>{let{components:c,id:a,mergeFn:i,type:p}=o,m=C(a,`../components/${p}`);j(m)||S(m,{recursive:!0});let A=0,b="";for(let f of c){let y=f.name;if(!y){console.warn(`\x1B[33m[WARN]: ${p} does not have "name" in config.\x1B[0m`),console.info(`\x1B[36mConfig: ${JSON.stringify(f,null," ")}\x1B[0m`);continue}let d=`${N(y)}.css`;if(b+=`@import "./${d}"; `,t.has(y)&&O(t.get(y),f))continue;t.set(y,f);let x=p==="cva"?v(f,i):V(f,i);A++,h(`${m}/${d}`,x)}h(`${m}/index.css`,b),console.info(` \x1B[36m${p}: ${A} files written\x1B[0m`)};return{name:"unplugin-jade-garden",enforce:"pre",transform(o,c){if(!r(c))return;let a=typeof s.components;if(a!=="object"||Array.isArray(s.components)){console.warn(` \x1B[33m[WARN]: The "components" prop must be an object.\x1B[0m`),console.info(` \x1B[36mReceived: ${a==="object"?"array":a}\x1B[0m`);return}let{cva:i,sva:p}=s.components;if((!i||!Array.isArray(i))&&(!p||!Array.isArray(p))){console.warn(` \x1B[33m[WARN]: "components.cva" and "components.sva" props must be arrays.\x1B[0m`),console.info(` \x1B[36mcva: 0 files written\x1B[0m \x1B[36msva: 0 files written\x1B[0m`);return}let{mergeFn:m}=s;i?.length&&e({components:i,id:c,mergeFn:m,type:"cva"}),p?.length&&e({components:p,id:c,mergeFn:m,type:"sva"})}}};export{w as a};