UNPKG

unplugin-jade-garden

Version:

Build tool plugin for creating CSS with Jade Garden

44 lines (37 loc) 3.66 kB
import{existsSync as C,mkdirSync as V,writeFileSync as h}from"fs";import{join as N}from"path";import{isEqual as j,kebabCase as O}from"es-toolkit";function A(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=A(n[s]))&&(t&&(t+=" "),t+=r)}else for(r in n)n[r]&&(t&&(t+=" "),t+=r);return t}function u(){for(var n,s,r=0,t="",e=arguments.length;r<e;r++)(n=arguments[r])&&(s=A(n))&&(t&&(t+=" "),t+=s);return t}import{createFilter as R}from"unplugin-utils";import{kebabCase as $}from"es-toolkit";var b=(n,s)=>{let r=$(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}__${$(a)}--${$(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}__${$(e)}--${$(c)} { @apply ${a}; }`)}}return`@layer components { ${t} } `};import{kebabCase as p}from"es-toolkit";var v=(n,s)=>{let r=p(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=>`__${p(i)}--${p(e[i])}`).join(""),c=e.slots.map(i=>`.${r}--${p(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}--${p(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}--${p(o)}`,a=Object.keys(e).filter(l=>l!=="class"&&l!=="className"&&l!==o).map(l=>`${c}__${p(l)}--${p(e[l])}`).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 l=s(a[i]);if(!l.length)continue;let m=`.${r}--${p(i)}`;t+=`${t.length?` `:""} ${m}${m}__${p(e)}--${p(c)} { @apply ${l}; }`}}}return`@layer components { ${t} } `};var _=n=>{let s={entry:n?.entry??"",components:n?.components??{cva:[],sva:[]},mergeFn:n?.mergeFn??u},r=R(s.entry),t=new Map,e=o=>{let{components:c,id:a,mergeFn:i,type:l}=o,m=N(a,`../components/${l}`);C(m)||V(m,{recursive:!0});let d=0,g="";for(let f of c){let y=f.name;if(!y){console.warn(`\x1B[33m[WARN]: ${l} does not have "name" in config.\x1B[0m`),console.info(`\x1B[36mConfig: ${JSON.stringify(f,null," ")}\x1B[0m`);continue}let x=`${O(y)}.css`;if(g+=`@import "./${x}"; `,t.has(y)&&j(t.get(y),f))continue;t.set(y,f);let S=l==="cva"?b(f,i):v(f,i);d++,h(`${m}/${x}`,S)}h(`${m}/index.css`,g),console.info(` \x1B[36m${l}: ${d} 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:l}=s.components;if(!Array.isArray(i)&&!Array.isArray(l)){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"}),l?.length&&e({components:l,id:c,mergeFn:m,type:"sva"})}}};export{_ as a};