unplugin-jade-garden
Version:
Build tool plugin for creating CSS with Jade Garden
44 lines (37 loc) • 4.41 kB
JavaScript
;var b=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var P=(n,s)=>{for(var o in s)b(n,o,{get:s[o],enumerable:!0})},F=(n,s,o,e)=>{if(s&&typeof s=="object"||typeof s=="function")for(let t of R(s))!k.call(n,t)&&t!==o&&b(n,t,{get:()=>s[t],enumerable:!(e=w(s,t))||e.enumerable});return n};var E=n=>F(b({},"__esModule",{value:!0}),n);var I={};P(I,{default:()=>L});module.exports=E(I);var N=require("unplugin");var f=require("fs"),C=require("path"),A=require("es-toolkit");function x(n){var s,o,e="";if(typeof n=="string"||typeof n=="number")e+=n;else if(typeof n=="object")if(Array.isArray(n)){var t=n.length;for(s=0;s<t;s++)n[s]&&(o=x(n[s]))&&(e&&(e+=" "),e+=o)}else for(o in n)n[o]&&(e&&(e+=" "),e+=o);return e}function d(){for(var n,s,o=0,e="",t=arguments.length;o<t;o++)(n=arguments[o])&&(s=x(n))&&(e&&(e+=" "),e+=s);return e}var O=require("unplugin-utils");var u=require("es-toolkit"),j=(n,s)=>{let o=(0,u.kebabCase)(n.name),e=n.base?` .${o} {
@apply ${s(n.base)};
}`:"";if(n.compoundVariants)for(let t of n.compoundVariants){let r=Object.keys(t).filter(a=>a!=="class"&&a!=="className").map(a=>`.${o}.${o}__${(0,u.kebabCase)(a)}--${(0,u.kebabCase)(t[a])}`).join(`,
`),c=s(t.class,t.className);r&&c.length&&(e+=`${e.length?`
`:""} ${r} {
@apply ${c};
}`)}if(n.variants)for(let t in n.variants){let r=n.variants[t];for(let c in r){let a=s(r[c]);a.length&&(e+=`${e.length?`
`:""} .${o}.${o}__${(0,u.kebabCase)(t)}--${(0,u.kebabCase)(c)} {
@apply ${a};
}`)}}return`@layer components {
${e}
}
`};var l=require("es-toolkit"),S=(n,s)=>{let o=(0,l.kebabCase)(n.name),e="";if(n.compoundSlots)for(let t of n.compoundSlots){let r=Object.keys(t).filter(i=>i!=="slots"&&i!=="class"&&i!=="className").map(i=>`__${(0,l.kebabCase)(i)}--${(0,l.kebabCase)(t[i])}`).join(""),c=t.slots.map(i=>`.${o}--${(0,l.kebabCase)(String(i))}${r}`).join(`,
`),a=s(t.class,t.className);a.length&&(e+=`${e.length?`
`:""} ${c} {
@apply ${a};
}`)}for(let t in n.slots){let r=s(n.slots[t]);r.length&&(e+=`${e.length?`
`:""} .${o}--${(0,l.kebabCase)(t)} {
@apply ${r};
}`)}if(n.compoundVariants){for(let t of n.compoundVariants)for(let r in n.slots)if(t.class?.[r]||t.className?.[r]){let c=`.${o}--${(0,l.kebabCase)(r)}`,a=Object.keys(t).filter(p=>p!=="class"&&p!=="className"&&p!==r).map(p=>`${c}__${(0,l.kebabCase)(p)}--${(0,l.kebabCase)(t[p])}`).join(""),i=s(t.class?.[r],t.className?.[r]);i.length&&(e+=`${e.length?`
`:""} ${c}${a} {
@apply ${i};
}`)}}if(n.variants)for(let t in n.variants){let r=n.variants[t];for(let c in r){let a=r[c];for(let i in a){let p=s(a[i]);if(!p.length)continue;let m=`.${o}--${(0,l.kebabCase)(i)}`;e+=`${e.length?`
`:""} ${m}${m}__${(0,l.kebabCase)(t)}--${(0,l.kebabCase)(c)} {
@apply ${p};
}`}}}return`@layer components {
${e}
}
`};var g=n=>{let s={entry:n?.entry??"",components:n?.components??{cva:[],sva:[]},mergeFn:n?.mergeFn??d},o=(0,O.createFilter)(s.entry),e=new Map,t=r=>{let{components:c,id:a,mergeFn:i,type:p}=r,m=(0,C.join)(a,`../components/${p}`);(0,f.existsSync)(m)||(0,f.mkdirSync)(m,{recursive:!0});let v=0,V="";for(let y of c){let $=y.name;if(!$){console.warn(`\x1B[33m[WARN]: ${p} does not have "name" in config.\x1B[0m`),console.info(`\x1B[36mConfig:
${JSON.stringify(y,null," ")}\x1B[0m`);continue}let h=`${(0,A.kebabCase)($)}.css`;if(V+=`@import "./${h}";
`,e.has($)&&(0,A.isEqual)(e.get($),y))continue;e.set($,y);let _=p==="cva"?j(y,i):S(y,i);v++,(0,f.writeFileSync)(`${m}/${h}`,_)}(0,f.writeFileSync)(`${m}/index.css`,V),console.info(`
\x1B[36m${p}: ${v} files written\x1B[0m`)};return{name:"unplugin-jade-garden",enforce:"pre",transform(r,c){if(!o(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&&t({components:i,id:c,mergeFn:m,type:"cva"}),p?.length&&t({components:p,id:c,mergeFn:m,type:"sva"})}}};var K=(0,N.createRspackPlugin)(g),L=K;