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