UNPKG

unplugin-jade-garden

Version:

Build tool plugin for creating CSS with Jade Garden

44 lines (37 loc) 4.4 kB
"use strict";var x=Object.defineProperty;var _=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var J=(n,s)=>{for(var o in s)x(n,o,{get:s[o],enumerable:!0})},G=(n,s,o,e)=>{if(s&&typeof s=="object"||typeof s=="function")for(let t of w(s))!F.call(n,t)&&t!==o&&x(n,t,{get:()=>s[t],enumerable:!(e=_(s,t))||e.enumerable});return n};var T=n=>G(x({},"__esModule",{value:!0}),n);var k={};J(k,{default:()=>W});module.exports=T(k);var O=require("unplugin");var f=require("fs"),N=require("path"),g=require("es-toolkit");function S(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=S(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=S(n))&&(e&&(e+=" "),e+=s);return e}var j=require("unplugin-utils");var u=require("es-toolkit"),C=(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 p=require("es-toolkit"),V=(n,s)=>{let o=(0,p.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,p.kebabCase)(i)}--${(0,p.kebabCase)(t[i])}`).join(""),c=t.slots.map(i=>`.${o}--${(0,p.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,p.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,p.kebabCase)(r)}`,a=Object.keys(t).filter(l=>l!=="class"&&l!=="className"&&l!==r).map(l=>`${c}__${(0,p.kebabCase)(l)}--${(0,p.kebabCase)(t[l])}`).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 l=s(a[i]);if(!l.length)continue;let m=`.${o}--${(0,p.kebabCase)(i)}`;e+=`${e.length?` `:""} ${m}${m}__${(0,p.kebabCase)(t)}--${(0,p.kebabCase)(c)} { @apply ${l}; }`}}}return`@layer components { ${e} } `};var A=n=>{let s={entry:n?.entry??"",components:n?.components??{cva:[],sva:[]},mergeFn:n?.mergeFn??d},o=(0,j.createFilter)(s.entry),e=new Map,t=r=>{let{components:c,id:a,mergeFn:i,type:l}=r,m=(0,N.join)(a,`../components/${l}`);(0,f.existsSync)(m)||(0,f.mkdirSync)(m,{recursive:!0});let b=0,v="";for(let y of c){let $=y.name;if(!$){console.warn(`\x1B[33m[WARN]: ${l} does not have "name" in config.\x1B[0m`),console.info(`\x1B[36mConfig: ${JSON.stringify(y,null," ")}\x1B[0m`);continue}let h=`${(0,g.kebabCase)($)}.css`;if(v+=`@import "./${h}"; `,e.has($)&&(0,g.isEqual)(e.get($),y))continue;e.set($,y);let R=l==="cva"?C(y,i):V(y,i);b++,(0,f.writeFileSync)(`${m}/${h}`,R)}(0,f.writeFileSync)(`${m}/index.css`,v),console.info(` \x1B[36m${l}: ${b} 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: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&&t({components:i,id:c,mergeFn:m,type:"cva"}),l?.length&&t({components:l,id:c,mergeFn:m,type:"sva"})}}};var P=(0,O.createWebpackPlugin)(A),W=P;