unplugin-jade-garden
Version:
Build tool plugin for creating CSS with Jade Garden
44 lines (37 loc) • 3.67 kB
JavaScript
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};