@salty-css/vite 0.0.1-alpha.206 → 0.0.1-alpha.207

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/index.cjs +21 -21
  2. package/index.js +261 -258
  3. package/package.json +2 -2
package/index.cjs CHANGED
@@ -1,40 +1,40 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const kt=require("esbuild"),_t=require("child_process"),a=require("path"),d=require("fs"),tt=require("fs/promises"),B=require("winston");var rt=typeof document<"u"?document.currentScript:null;function Dt(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const s in t)if(s!=="default"){const n=Object.getOwnPropertyDescriptor(t,s);Object.defineProperty(e,s,n.get?n:{enumerable:!0,get:()=>t[s]})}}return e.default=t,Object.freeze(e)}const mt=Dt(kt),dt=t=>String.fromCharCode(t+(t>25?39:97)),Ot=(t,e)=>{let s="",n;for(n=Math.abs(t);n>52;n=n/52|0)s=dt(n%52)+s;return s=dt(n%52)+s,s.length<e?s=s.padStart(e,"a"):s.length>e&&(s=s.slice(-e)),s},Tt=(t,e)=>{let s=e.length;for(;s;)t=t*33^e.charCodeAt(--s);return t},z=(t,e=5)=>{const s=Tt(5381,JSON.stringify(t))>>>0;return Ot(s,e)};function R(t){return t?typeof t!="string"?R(String(t)):t.replace(/[\s.]/g,"-").replace(/[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g,(e,s)=>(s>0?"-":"")+e.toLowerCase()):""}const Et=t=>e=>{if(typeof e!="string"||!t)return;let s=e;const n=[];return Object.values(t).forEach(o=>{const{pattern:r,transform:c}=o;s=s.replace(r,y=>{const{value:g,css:u}=c(y);return u&&n.push(u),g})}),{transformed:s,additionalCss:n}},gt=t=>e=>typeof e!="string"||!/\{[^{}]+\}/g.test(e)?void 0:{transformed:e.replace(/\{([^{}]+)\}/g,(...o)=>`var(--${R(o[1].replaceAll(".","-"))})`)},Mt=gt(),Rt=["top","right","bottom","left","min-width",/.*width.*/,/^[^line]*height.*/,/padding.*/,/margin.*/,/border.*/,/inset.*/,/.*radius.*/,/.*spacing.*/,/.*gap.*/,/.*indent.*/,/.*offset.*/,/.*size.*/,/.*thickness.*/,/.*font-size.*/],Vt=(t,e,s)=>Rt.some(o=>typeof o=="string"?o===t:o.test(t))?`${e}px`:`${e}`,Jt=["Webkit","Moz","ms","O"],vt=t=>t.startsWith("-")?t:Jt.some(e=>t.startsWith(e))?`-${R(t)}`:R(t),Y=async(t,e="",s,n=!1)=>{if(!t)throw new Error("No styles provided to parseStyles function!");const o=new Set,c=Object.entries(t).map(async([w,i])=>{const p=w.trim(),N=vt(p),F=(O,_=";")=>`${N}:${O}${_}`;if(typeof i=="function"&&(i=i({scope:e,config:s})),i instanceof Promise&&(i=await i),typeof i=="object"){if(!i)return;if(i.isColor)return F(i.toString());if(p==="defaultVariants")return;if(p==="variants"){const k=Object.entries(i);for(const[x,E]of k){if(!E)return;const l=Object.entries(E);for(const[$,h]of l){if(!h)return;const f=`${e}.${x}-${$}`;(await Y(h,f,s)).forEach(P=>o.add(P))}}return}if(p==="compoundVariants"){for(const k of i){const{css:x,...E}=k,l=Object.entries(E).reduce((h,[f,S])=>`${h}.${f}-${S}`,e);(await Y(x,l,s)).forEach(h=>o.add(h))}return}if(p.startsWith("@")){const k=p,x=await G(i,e,s),E=`${k} { ${x} }`;o.add(E);return}const O=w.includes("&")?p.replace("&",e):p.startsWith(":")?`${e}${p}`:`${e} ${p}`;(await Y(i,O,s)).forEach(k=>o.add(k));return}if(typeof i=="number"){const O=Vt(N,i);return F(O)}if(typeof i!="string")if("toString"in i)i=i.toString();else throw new Error(`Invalid value type for property ${N}`);return F(i)}),{modifiers:y}={},g=[gt(),Et(y)],m=(await Promise.all(c).then(w=>Promise.all(w.map(i=>g.reduce(async(p,N)=>{const F=await p;if(!F)return F;const D=await N(F);if(!D)return F;const{transformed:O,additionalCss:_}=D;let k="";if(_)for(const x of _)k+=await G(x,"");return`${k}${O}`},Promise.resolve(i)))))).join(`
2
- `);if(!m.trim())return o;const b=e?`${e} { ${m} }`:m;return o.add(b),o},G=async(t,e,s,n=!1)=>[...await Y(t,e,s,n)].join(`
3
- `),ht=async(t,e=[])=>{if(!t)return"";const s=[],n={};for(const[o,r]of Object.entries(t))if(typeof r!="function")if(r&&typeof r=="object"){const c=o.trim(),y=await ht(r,[...e,c]);s.push(y)}else n[o]=r;if(Object.keys(n).length){const o=e.map(R).join("-"),r="t_"+z(o,4),c=await G(n,`.${o}, .${r}`);s.push(c)}return s.join(`
4
- `)},zt=t=>t?Object.entries(t).reduce((e,[s,n])=>(typeof n=="function"?e[s]="any":typeof n=="object"&&(e[s]=wt(n).map(o=>`"${o}"`).join(" | ")),e),{}):{},wt=(t,e="",s=new Set)=>t?(Object.entries(t).forEach(([n,o])=>{const r=e?`${e}.${n}`:n;return typeof o=="object"?wt(o,r,s):s.add(e)}),[...s]):[],bt=t=>{if(!t||t==="/")throw new Error("Could not find package.json file");const e=a.join(t,"package.json");return d.existsSync(e)?e:bt(a.join(t,".."))},At=async t=>{const e=bt(t);return await tt.readFile(e,"utf-8").then(JSON.parse).catch(()=>{})},Wt=async t=>{const e=await At(t);if(e)return e.type};let W;const $t=async t=>{if(W)return W;const e=await Wt(t);return e==="module"?W="esm":(e==="commonjs"||(typeof document>"u"?require("url").pathToFileURL(__filename).href:rt&&rt.tagName.toUpperCase()==="SCRIPT"&&rt.src||new URL("index.cjs",document.baseURI).href).endsWith(".cjs"))&&(W="cjs"),W||"esm"},it=B.createLogger({level:"debug",format:B.format.combine(B.format.colorize(),B.format.cli()),transports:[new B.transports.Console({})]});function St(t){return t?typeof t!="string"?St(String(t)):t.replace(/[\s-]/g,".").replace(/[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g,(e,s)=>(s>0?".":"")+e.toLowerCase()):""}const It={"*, *::before, *::after":{boxSizing:"border-box"},"*":{margin:0},html:{lineHeight:1.15,textSizeAdjust:"100%",WebkitFontSmoothing:"antialiased"},"img, picture, video, canvas, svg":{display:"block",maxWidth:"100%"},"p, h1, h2, h3, h4, h5, h6":{overflowWrap:"break-word"},p:{textWrap:"pretty"},"h1, h2, h3, h4, h5, h6":{textWrap:"balance"},a:{color:"currentColor"},button:{lineHeight:"1em",color:"currentColor"},"input, optgroup, select, textarea":{fontFamily:"inherit",fontSize:"100%",lineHeight:"1.15em"}},I=(...t)=>t.flat().reduce((e,s)=>s!=null&&s._current?{...e,...s._current}:{...e,...s},{}),Zt=(...t)=>t.flat().reduce((e,s)=>({...e,...s._children}),{}),v={externalModules:[],rcFile:void 0,destDir:void 0},jt=t=>{if(v.externalModules.length>0)return v.externalModules;const s=d.readFileSync(t,"utf8").match(/externalModules:\s?\[(.*)\]/);if(!s)return[];const n=s[1].split(",").map(o=>o.replace(/['"`]/g,"").trim());return v.externalModules=n,n},A=async t=>{if(v.destDir)return v.destDir;const e=await at(t),s=a.join(t,(e==null?void 0:e.saltygenDir)||"saltygen");return v.destDir=s,s},Ft=["salty","css","styles","styled"],qt=(t=[])=>new RegExp(`\\.(${[...Ft,...t].join("|")})\\.`),Z=(t,e=[])=>qt(e).test(t),Ct=async t=>{if(v.rcFile)return v.rcFile;if(t==="/")throw new Error("Could not find .saltyrc.json file");const e=a.join(t,".saltyrc.json"),s=await tt.readFile(e,"utf-8").then(JSON.parse).catch(()=>{});return s?(v.rcFile=s,s):Ct(a.join(t,".."))},at=async t=>{var n,o;const e=await Ct(t),s=(n=e.projects)==null?void 0:n.find(r=>t.endsWith(r.dir||""));return s||((o=e.projects)==null?void 0:o.find(r=>r.dir===e.defaultProject))},Ht=async t=>{const e=await at(t),s=await A(t),n=a.join(t,(e==null?void 0:e.configDir)||"","salty.config.ts"),o=a.join(s,"salty.config.js"),r=await $t(t),c=jt(n);await mt.build({entryPoints:[n],minify:!0,treeShaking:!0,bundle:!0,outfile:o,format:r,external:c});const y=Date.now(),{config:g}=await import(`${o}?t=${y}`);return g},Lt=async(t,e)=>{var lt,ft;const s=await A(t),n={mediaQueries:[],globalStyles:[],variables:[],templates:[]};await Promise.all([...e].map(async j=>{const{contents:C,outputFilePath:J}=await et(t,j,s);Object.entries(C).forEach(([T,M])=>{M.isMedia?n.mediaQueries.push([T,M]):M.isGlobalDefine?n.globalStyles.push(M):M.isDefineVariables?n.variables.push(M):M.isDefineTemplates&&n.templates.push(M._setPath(J))})}));const o=await Ht(t),r={...o},c=new Set,y=(j,C=[])=>j?Object.entries(j).flatMap(([J,T])=>{if(!T)return;if(typeof T=="object")return y(T,[...C,J]);const M=St(J),nt=R(J),ot=[...C,M].join(".");c.add(`"${ot}"`);const X=[...C.map(R),nt].join("-"),ut=Mt(T);return ut?`--${X}: ${ut.transformed};`:`--${X}: ${T};`}):[],g=j=>j?Object.entries(j).flatMap(([C,J])=>{const T=y(J);return C==="base"?T.join(""):`${C} { ${T.join("")} }`}):[],u=j=>j?Object.entries(j).flatMap(([C,J])=>Object.entries(J).flatMap(([T,M])=>{const nt=y(M,[C]),ot=`.${C}-${T}, [data-${C}="${T}"]`,X=nt.join("");return`${ot} { ${X} }`})):[],m=j=>({...j,responsive:void 0,conditional:void 0}),b=j=>n.variables.map(C=>j==="static"?m(C._current):C._current[j]),w=I(m(o.variables),b("static")),i=y(w),p=I((lt=o.variables)==null?void 0:lt.responsive,b("responsive")),N=g(p),F=I((ft=o.variables)==null?void 0:ft.conditional,b("conditional")),D=u(F),O=a.join(s,"css/_variables.css"),_=`:root { ${i.join("")} ${N.join("")} } ${D.join("")}`;d.writeFileSync(O,_),r.staticVariables=w;const k=a.join(s,"css/_global.css"),x=I(o.global,n.globalStyles),E=await G(x,"");d.writeFileSync(k,`@layer global { ${E} }`);const l=a.join(s,"css/_reset.css"),h=o.reset==="none"?{}:typeof o.reset=="object"?o.reset:It,f=await G(h,"");d.writeFileSync(l,`@layer reset { ${f} }`);const S=a.join(s,"css/_templates.css"),P=I(o.templates,n.templates),V=await ht(P),q=zt(P);d.writeFileSync(S,`@layer templates { ${V} }`),r.templates=P;const H=Zt(n.templates);r.templatePaths=Object.fromEntries(Object.entries(H).map(([j,C])=>[j,C._path]));const{mediaQueries:L}=n;r.mediaQueries=Object.fromEntries(L.map(([j,C])=>[`@${j}`,C]));const K=L.map(([j])=>`'@${j}'`).join(" | "),st=a.join(s,"types/css-tokens.d.ts"),Q=`
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const kt=require("esbuild"),_t=require("child_process"),c=require("path"),d=require("fs"),tt=require("fs/promises"),B=require("winston");var rt=typeof document<"u"?document.currentScript:null;function Dt(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const s in t)if(s!=="default"){const n=Object.getOwnPropertyDescriptor(t,s);Object.defineProperty(e,s,n.get?n:{enumerable:!0,get:()=>t[s]})}}return e.default=t,Object.freeze(e)}const gt=Dt(kt),pt=t=>String.fromCharCode(t+(t>25?39:97)),Ot=(t,e)=>{let s="",n;for(n=Math.abs(t);n>52;n=n/52|0)s=pt(n%52)+s;return s=pt(n%52)+s,s.length<e?s=s.padStart(e,"a"):s.length>e&&(s=s.slice(-e)),s},Tt=(t,e)=>{let s=e.length;for(;s;)t=t*33^e.charCodeAt(--s);return t},z=(t,e=5)=>{const s=Tt(5381,JSON.stringify(t))>>>0;return Ot(s,e)};function R(t){return t?typeof t!="string"?R(String(t)):t.replace(/[\s.]/g,"-").replace(/[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g,(e,s)=>(s>0?"-":"")+e.toLowerCase()):""}const Et=t=>e=>{if(typeof e!="string"||!t)return;let s=e;const n=[];return Object.values(t).forEach(o=>{const{pattern:r,transform:a}=o;s=s.replace(r,h=>{const{value:F,css:l}=a(h);return l&&n.push(l),F})}),{transformed:s,additionalCss:n}},ht=t=>e=>typeof e!="string"||!/\{[^{}]+\}/g.test(e)?void 0:{transformed:e.replace(/\{([^{}]+)\}/g,(...o)=>`var(--${R(o[1].replaceAll(".","-"))})`)},Mt=ht(),Rt=["top","right","bottom","left","min-width",/.*width.*/,/^[^line]*height.*/,/padding.*/,/margin.*/,/border.*/,/inset.*/,/.*radius.*/,/.*spacing.*/,/.*gap.*/,/.*indent.*/,/.*offset.*/,/.*size.*/,/.*thickness.*/,/.*font-size.*/],Vt=(t,e,s)=>Rt.some(o=>typeof o=="string"?o===t:o.test(t))?`${e}px`:`${e}`,Jt=["Webkit","Moz","ms","O"],vt=t=>t.startsWith("-")?t:Jt.some(e=>t.startsWith(e))?`-${R(t)}`:R(t),Y=async(t,e="",s,n=!1)=>{if(!t)throw new Error("No styles provided to parseStyles function!");const o=new Set,a=Object.entries(t).map(async([m,i])=>{const p=m.trim(),b=vt(p),C=(O,_=";")=>`${b}:${O}${_}`;if(typeof i=="function"&&(i=i({scope:e,config:s})),i instanceof Promise&&(i=await i),typeof i=="object"){if(!i)return;if(i.isColor)return C(i.toString());if(p==="defaultVariants")return;if(p==="variants"){const D=Object.entries(i);for(const[P,E]of D){if(!E)return;const f=Object.entries(E);for(const[w,g]of f){if(!g)return;const u=`${e}.${P}-${w}`;(await Y(g,u,s)).forEach(x=>o.add(x))}}return}if(p==="compoundVariants"){for(const D of i){const{css:P,...E}=D,f=Object.entries(E).reduce((g,[u,S])=>`${g}.${u}-${S}`,e);(await Y(P,f,s)).forEach(g=>o.add(g))}return}if(p.startsWith("@")){const D=p,P=await G(i,e,s),E=`${D} { ${P} }`;o.add(E);return}const O=m.includes("&")?p.replace("&",e):p.startsWith(":")?`${e}${p}`:`${e} ${p}`;(await Y(i,O,s)).forEach(D=>o.add(D));return}if(typeof i=="number"){const O=Vt(b,i);return C(O)}if(typeof i!="string")if("toString"in i)i=i.toString();else throw new Error(`Invalid value type for property ${b}`);return C(i)}),{modifiers:h}={},F=[ht(),Et(h)],y=(await Promise.all(a).then(m=>Promise.all(m.map(i=>F.reduce(async(p,b)=>{const C=await p;if(!C)return C;const k=await b(C);if(!k)return C;const{transformed:O,additionalCss:_}=k;let D="";if(_)for(const P of _)D+=await G(P,"");return`${D}${O}`},Promise.resolve(i)))))).join(`
2
+ `);if(!y.trim())return o;const $=e?`${e} { ${y} }`:y;return o.add($),o},G=async(t,e,s,n=!1)=>[...await Y(t,e,s,n)].join(`
3
+ `),wt=async(t,e=[])=>{if(!t)return"";const s=[],n={};for(const[o,r]of Object.entries(t))if(typeof r!="function")if(r&&typeof r=="object"){const a=o.trim(),h=await wt(r,[...e,a]);s.push(h)}else n[o]=r;if(Object.keys(n).length){const o=e.map(R).join("-"),r="t_"+z(o,4),a=await G(n,`.${o}, .${r}`);s.push(a)}return s.join(`
4
+ `)},zt=t=>t?Object.entries(t).reduce((e,[s,n])=>(typeof n=="function"?e[s]="any":typeof n=="object"&&(e[s]=$t(n).map(o=>`"${o}"`).join(" | ")),e),{}):{},$t=(t,e="",s=new Set)=>t?(Object.entries(t).forEach(([n,o])=>{const r=e?`${e}.${n}`:n;return typeof o=="object"?$t(o,r,s):s.add(e)}),[...s]):[],bt=t=>{if(!t||t==="/")throw new Error("Could not find package.json file");const e=c.join(t,"package.json");return d.existsSync(e)?e:bt(c.join(t,".."))},At=async t=>{const e=bt(t);return await tt.readFile(e,"utf-8").then(JSON.parse).catch(()=>{})},Wt=async t=>{const e=await At(t);if(e)return e.type};let I;const St=async t=>{if(I)return I;const e=await Wt(t);return e==="module"?I="esm":(e==="commonjs"||(typeof document>"u"?require("url").pathToFileURL(__filename).href:rt&&rt.tagName.toUpperCase()==="SCRIPT"&&rt.src||new URL("index.cjs",document.baseURI).href).endsWith(".cjs"))&&(I="cjs"),I||"esm"},it=B.createLogger({level:"debug",format:B.format.combine(B.format.colorize(),B.format.cli()),transports:[new B.transports.Console({})]});function jt(t){return t?typeof t!="string"?jt(String(t)):t.replace(/[\s-]/g,".").replace(/[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g,(e,s)=>(s>0?".":"")+e.toLowerCase()):""}const It={"*, *::before, *::after":{boxSizing:"border-box"},"*":{margin:0},html:{lineHeight:1.15,textSizeAdjust:"100%",WebkitFontSmoothing:"antialiased"},"img, picture, video, canvas, svg":{display:"block",maxWidth:"100%"},"p, h1, h2, h3, h4, h5, h6":{overflowWrap:"break-word"},p:{textWrap:"pretty"},"h1, h2, h3, h4, h5, h6":{textWrap:"balance"},a:{color:"currentColor"},button:{lineHeight:"1em",color:"currentColor"},"input, optgroup, select, textarea":{fontFamily:"inherit",fontSize:"100%",lineHeight:"1.15em"}},Z=(...t)=>t.flat().reduce((e,s)=>s!=null&&s._current?{...e,...s._current}:{...e,...s},{}),Zt=(...t)=>t.flat().reduce((e,s)=>({...e,...s._children}),{}),v={externalModules:[],rcFile:void 0,destDir:void 0},Ft=t=>{if(v.externalModules.length>0)return v.externalModules;const s=d.readFileSync(t,"utf8").match(/externalModules:\s?\[(.*)\]/);if(!s)return[];const n=s[1].split(",").map(o=>o.replace(/['"`]/g,"").trim());return v.externalModules=n,n},A=async t=>{if(v.destDir)return v.destDir;const e=await at(t),s=c.join(t,(e==null?void 0:e.saltygenDir)||"saltygen");return v.destDir=s,s},Ct=["salty","css","styles","styled"],qt=(t=[])=>new RegExp(`\\.(${[...Ct,...t].join("|")})\\.`),q=(t,e=[])=>qt(e).test(t),Nt=async t=>{if(v.rcFile)return v.rcFile;if(t==="/")throw new Error("Could not find .saltyrc.json file");const e=c.join(t,".saltyrc.json"),s=await tt.readFile(e,"utf-8").then(JSON.parse).catch(()=>{});return s?(v.rcFile=s,s):Nt(c.join(t,".."))},at=async t=>{var n,o;const e=await Nt(t),s=(n=e.projects)==null?void 0:n.find(r=>t.endsWith(r.dir||""));return s||((o=e.projects)==null?void 0:o.find(r=>r.dir===e.defaultProject))},Ht=async t=>{const e=await at(t),s=await A(t),n=c.join(t,(e==null?void 0:e.configDir)||"","salty.config.ts"),o=c.join(s,"salty.config.js"),r=await St(t),a=Ft(n);await gt.build({entryPoints:[n],minify:!0,treeShaking:!0,bundle:!0,outfile:o,format:r,external:a});const h=Date.now(),{config:F}=await import(`${o}?t=${h}`);return F},Lt=async(t,e)=>{var ft,ut;const s=await A(t),n={mediaQueries:[],globalStyles:[],variables:[],templates:[]};await Promise.all([...e].map(async j=>{const{contents:N,outputFilePath:J}=await et(t,j,s);Object.entries(N).forEach(([T,M])=>{M.isMedia?n.mediaQueries.push([T,M]):M.isGlobalDefine?n.globalStyles.push(M):M.isDefineVariables?n.variables.push(M):M.isDefineTemplates&&n.templates.push(M._setPath(J))})}));const o=await Ht(t),r={...o},a=new Set,h=(j,N=[])=>j?Object.entries(j).flatMap(([J,T])=>{if(!T)return;if(typeof T=="object")return h(T,[...N,J]);const M=jt(J),nt=R(J),ot=[...N,M].join(".");a.add(`"${ot}"`);const X=[...N.map(R),nt].join("-"),dt=Mt(T);return dt?`--${X}: ${dt.transformed};`:`--${X}: ${T};`}):[],F=j=>j?Object.entries(j).flatMap(([N,J])=>{const T=h(J);return N==="base"?T.join(""):`${N} { ${T.join("")} }`}):[],l=j=>j?Object.entries(j).flatMap(([N,J])=>Object.entries(J).flatMap(([T,M])=>{const nt=h(M,[N]),ot=`.${N}-${T}, [data-${N}="${T}"]`,X=nt.join("");return`${ot} { ${X} }`})):[],y=j=>({...j,responsive:void 0,conditional:void 0}),$=j=>n.variables.map(N=>j==="static"?y(N._current):N._current[j]),m=Z(y(o.variables),$("static")),i=h(m),p=Z((ft=o.variables)==null?void 0:ft.responsive,$("responsive")),b=F(p),C=Z((ut=o.variables)==null?void 0:ut.conditional,$("conditional")),k=l(C),O=c.join(s,"css/_variables.css"),_=`:root { ${i.join("")} ${b.join("")} } ${k.join("")}`;d.writeFileSync(O,_),r.staticVariables=m;const D=c.join(s,"css/_global.css"),P=Z(o.global,n.globalStyles),E=await G(P,"");d.writeFileSync(D,`@layer global { ${E} }`);const f=c.join(s,"css/_reset.css"),g=o.reset==="none"?{}:typeof o.reset=="object"?o.reset:It,u=await G(g,"");d.writeFileSync(f,`@layer reset { ${u} }`);const S=c.join(s,"css/_templates.css"),x=Z(o.templates,n.templates),V=await wt(x),H=zt(x);d.writeFileSync(S,`@layer templates { ${V} }`),r.templates=x;const L=Zt(n.templates);r.templatePaths=Object.fromEntries(Object.entries(L).map(([j,N])=>[j,N._path]));const{mediaQueries:W}=n;r.mediaQueries=Object.fromEntries(W.map(([j,N])=>[`@${j}`,N]));const K=W.map(([j])=>`'@${j}'`).join(" | "),st=c.join(s,"types/css-tokens.d.ts"),Q=`
5
5
  // Variable types
6
- type VariableTokens = ${[...c].join("|")};
6
+ type VariableTokens = ${[...a].join("|")};
7
7
  type PropertyValueToken = \`{\${VariableTokens}}\`;
8
8
 
9
9
  // Template types
10
10
  type TemplateTokens = {
11
- ${Object.entries(q).map(([j,C])=>`${j}?: ${C}`).join(`
11
+ ${Object.entries(H).map(([j,N])=>`${j}?: ${N}`).join(`
12
12
  `)}
13
13
  }
14
14
 
15
15
  // Media query types
16
16
  type MediaQueryKeys = ${K||"''"};
17
- `;d.writeFileSync(st,Q);const Pt=a.join(s,"cache/config-cache.json");d.writeFileSync(Pt,JSON.stringify(r,null,2))},pt=t=>t.replace(/styled\(([^"'`{,]+),/g,(e,s)=>{if(/^['"`]/.test(s))return e;const o=new RegExp(`import[^;]*${s}[,\\s{][^;]*from\\s?([^{};]+);`);if(!o.test(t))return e;const c=o.exec(t);if(c){const y=c.at(1);if(Ft.some(u=>y==null?void 0:y.includes(u)))return e}return"styled('div',"}),Bt=(t,e)=>{try{const s=d.readFileSync(a.join(e,"saltygen/cache/config-cache.json"),"utf8");return s?`globalThis.saltyConfig = ${s};
17
+ `;d.writeFileSync(st,Q);const xt=c.join(s,"cache/config-cache.json");d.writeFileSync(xt,JSON.stringify(r,null,2))},yt=t=>t.replace(/styled\(([^"'`{,]+),/g,(e,s)=>{if(/^['"`]/.test(s))return e;const o=new RegExp(`import[^;]*${s}[,\\s{][^;]*from\\s?([^{};]+);`);if(!o.test(t))return e;const a=o.exec(t);if(a){const h=a.at(1);if(Ct.some(l=>h==null?void 0:h.includes(l)))return e}return"styled('div',"}),Bt=(t,e)=>{try{const s=d.readFileSync(c.join(e,"saltygen/cache/config-cache.json"),"utf8");return s?`globalThis.saltyConfig = ${s};
18
18
 
19
19
  ${t}`:`globalThis.saltyConfig = {};
20
20
 
21
- ${t}`}catch{return t}},et=async(t,e,s)=>{const n=z(e),o=a.join(s,"./temp");d.existsSync(o)||d.mkdirSync(o);const r=a.parse(e);let c=d.readFileSync(e,"utf8");c=pt(c),c=Bt(c,t);const y=a.join(s,"js",n+".js"),g=await at(t),u=a.join(t,(g==null?void 0:g.configDir)||"","salty.config.ts"),m=jt(u),b=await $t(t);await mt.build({stdin:{contents:c,sourcefile:r.base,resolveDir:r.dir,loader:"tsx"},minify:!1,treeShaking:!0,bundle:!0,outfile:y,format:b,target:["node20"],keepNames:!0,external:m,packages:"external",plugins:[{name:"test",setup:p=>{p.onLoad({filter:/.*\.css|salty|styles|styled\.ts/},N=>{const F=d.readFileSync(N.path,"utf8");return{contents:pt(F),loader:"ts"}})}}]});const w=Date.now();return{contents:await import(`${y}?t=${w}`),outputFilePath:y}},Gt=async t=>{const e=await A(t),s=a.join(e,"cache/config-cache.json"),n=d.readFileSync(s,"utf8");if(!n)throw new Error("Could not find config cache file");return JSON.parse(n)},ct=async t=>{const e=await Gt(t),s=await A(t),n=a.join(s,"salty.config.js"),o=Date.now(),{config:r}=await import(`${n}?t=${o}`);return I(r,e)},xt=()=>{try{return process.env.NODE_ENV==="production"}catch{return!1}},Kt=async(t,e=xt(),s=!0)=>{try{const n=Date.now();e?it.info("Generating CSS in production mode! 🔥"):it.info("Generating CSS in development mode! 🚀");const o=[],r=[],c=await A(t),y=a.join(c,"index.css");s&&(()=>{d.existsSync(c)&&_t.execSync("rm -rf "+c),d.mkdirSync(c,{recursive:!0}),d.mkdirSync(a.join(c,"css")),d.mkdirSync(a.join(c,"types")),d.mkdirSync(a.join(c,"js")),d.mkdirSync(a.join(c,"cache"))})();const u=new Set,m=new Set;async function b(l){const $=["node_modules","saltygen"],h=d.statSync(l);if(h.isDirectory()){const f=d.readdirSync(l);if($.some(P=>l.includes(P)))return;await Promise.all(f.map(P=>b(a.join(l,P))))}else if(h.isFile()&&Z(l)){u.add(l);const S=d.readFileSync(l,"utf8");/define[\w\d]+\(/.test(S)&&m.add(l)}}await b(t),await Lt(t,m);const w={keyframes:[],components:[],classNames:[]};await Promise.all([...u].map(async l=>{const{contents:$}=await et(t,l,c);Object.entries($).forEach(([h,f])=>{f.isKeyframes?w.keyframes.push({value:f,src:l,name:h}):f.isClassName?w.classNames.push({...f,src:l,name:h}):f.generator&&w.components.push({...f,src:l,name:h})})}));const i=await ct(t);for(const l of w.keyframes){const{value:$}=l,h=`a_${$.animationName}.css`,f=`css/${h}`,S=a.join(c,f);o.push(h),d.writeFileSync(S,$.css)}const p={};for(const l of w.components){const{src:$,name:h}=l,f=l.generator._withBuildContext({callerName:h,isProduction:e,config:i});r[f.priority]||(r[f.priority]=[]);const S=await f.css;if(!S)continue;r[f.priority].push(f.cssFileName);const P=`css/${f.cssFileName}`,V=a.join(c,P);d.writeFileSync(V,S),i.importStrategy==="component"&&(p[$]?p[$].push(f.cssFileName):p[$]=[f.cssFileName])}for(const l of w.classNames){const{src:$,name:h}=l,f=l.generator._withBuildContext({callerName:h,isProduction:e,config:i}),S=await f.css;if(!S)continue;r[0].push(f.cssFileName);const P=`css/${f.cssFileName}`,V=a.join(c,P);d.writeFileSync(V,S),i.importStrategy==="component"&&(p[$]?p[$].push(f.cssFileName):p[$]=[f.cssFileName])}i.importStrategy==="component"&&Object.entries(p).forEach(([l,$])=>{const h=$.map(q=>`@import url('./${q}');`).join(`
22
- `),f=z(l,6),S=a.parse(l),P=R(S.name),V=a.join(c,`css/f_${P}-${f}.css`);d.writeFileSync(V,h)});const N=o.map(l=>`@import url('./css/${l}');`).join(`
21
+ ${t}`}catch{return t}},et=async(t,e,s)=>{const n=z(e),o=c.join(s,"./temp");d.existsSync(o)||d.mkdirSync(o);const r=c.parse(e);let a=d.readFileSync(e,"utf8");a=yt(a),a=Bt(a,t);const h=c.join(s,"js",n+".js"),F=await at(t),l=c.join(t,(F==null?void 0:F.configDir)||"","salty.config.ts"),y=Ft(l),$=await St(t);await gt.build({stdin:{contents:a,sourcefile:r.base,resolveDir:r.dir,loader:"tsx"},minify:!1,treeShaking:!0,bundle:!0,outfile:h,format:$,target:["node20"],keepNames:!0,external:y,packages:"external",plugins:[{name:"test",setup:p=>{p.onLoad({filter:/.*\.css|salty|styles|styled\.ts/},b=>{const C=d.readFileSync(b.path,"utf8");return{contents:yt(C),loader:"ts"}})}}]});const m=Date.now();return{contents:await import(`${h}?t=${m}`),outputFilePath:h}},Gt=async t=>{const e=await A(t),s=c.join(e,"cache/config-cache.json"),n=d.readFileSync(s,"utf8");if(!n)throw new Error("Could not find config cache file");return JSON.parse(n)},ct=async t=>{const e=await Gt(t),s=await A(t),n=c.join(s,"salty.config.js"),o=Date.now(),{config:r}=await import(`${n}?t=${o}`);return Z(r,e)},lt=()=>{try{return process.env.NODE_ENV==="production"}catch{return!1}},Kt=async(t,e=lt(),s=!0)=>{try{const n=Date.now();e?it.info("Generating CSS in production mode! 🔥"):it.info("Generating CSS in development mode! 🚀");const o=[],r=[],a=await A(t),h=c.join(a,"index.css");s&&(()=>{d.existsSync(a)&&_t.execSync("rm -rf "+a),d.mkdirSync(a,{recursive:!0}),d.mkdirSync(c.join(a,"css")),d.mkdirSync(c.join(a,"types")),d.mkdirSync(c.join(a,"js")),d.mkdirSync(c.join(a,"cache"))})();const l=new Set,y=new Set;async function $(f){const w=["node_modules","saltygen"],g=d.statSync(f);if(g.isDirectory()){const u=d.readdirSync(f);if(w.some(x=>f.includes(x)))return;await Promise.all(u.map(x=>$(c.join(f,x))))}else if(g.isFile()&&q(f)){l.add(f);const S=d.readFileSync(f,"utf8");/define[\w\d]+\(/.test(S)&&y.add(f)}}await $(t),await Lt(t,y);const m={keyframes:[],components:[],classNames:[]};await Promise.all([...l].map(async f=>{const{contents:w}=await et(t,f,a);Object.entries(w).forEach(([g,u])=>{u.isKeyframes?m.keyframes.push({value:u,src:f,name:g}):u.isClassName?m.classNames.push({...u,src:f,name:g}):u.generator&&m.components.push({...u,src:f,name:g})})}));const i=await ct(t);for(const f of m.keyframes){const{value:w}=f,g=`a_${w.animationName}.css`,u=`css/${g}`,S=c.join(a,u);o.push(g),d.writeFileSync(S,w.css)}const p={};for(const f of m.components){const{src:w,name:g}=f,u=f.generator._withBuildContext({callerName:g,isProduction:e,config:i});r[u.priority]||(r[u.priority]=[]);const S=await u.css;if(!S)continue;r[u.priority].push(u.cssFileName);const x=`css/${u.cssFileName}`,V=c.join(a,x);d.writeFileSync(V,S),i.importStrategy==="component"&&(p[w]?p[w].push(u.cssFileName):p[w]=[u.cssFileName])}for(const f of m.classNames){const{src:w,name:g}=f,u=f.generator._withBuildContext({callerName:g,isProduction:e,config:i}),S=await u.css;if(!S)continue;r[0].push(u.cssFileName);const x=`css/${u.cssFileName}`,V=c.join(a,x);d.writeFileSync(V,S),i.importStrategy==="component"&&(p[w]?p[w].push(u.cssFileName):p[w]=[u.cssFileName])}i.importStrategy==="component"&&Object.entries(p).forEach(([f,w])=>{const g=w.map(H=>`@import url('./${H}');`).join(`
22
+ `),u=z(f,6),S=c.parse(f),x=R(S.name),V=c.join(a,`css/f_${x}-${u}.css`);d.writeFileSync(V,g)});const b=o.map(f=>`@import url('./css/${f}');`).join(`
23
23
  `);let _=`@layer reset, global, templates, l0, l1, l2, l3, l4, l5, l6, l7, l8;
24
24
 
25
- ${["_variables.css","_reset.css","_global.css","_templates.css"].filter(l=>{try{return d.readFileSync(a.join(c,"css",l),"utf8").length>0}catch{return!1}}).map(l=>`@import url('./css/${l}');`).join(`
25
+ ${["_variables.css","_reset.css","_global.css","_templates.css"].filter(f=>{try{return d.readFileSync(c.join(a,"css",f),"utf8").length>0}catch{return!1}}).map(f=>`@import url('./css/${f}');`).join(`
26
26
  `)}
27
- ${N}`;if(i.importStrategy!=="component"){const l=r.reduce(($,h,f)=>{const S=h.reduce((H,L)=>{var Q;const K=a.join(c,"css",L),st=d.readFileSync(K,"utf8"),U=((Q=/.*-([^-]+)-\d+.css/.exec(L))==null?void 0:Q.at(1))||z(K,6);return H.includes(U)?H:`${H}
28
- /*start:${U}*/
27
+ ${b}`;if(i.importStrategy!=="component"){const f=r.reduce((w,g,u)=>{const S=g.reduce((L,W)=>{var Q;const K=c.join(a,"css",W),st=d.readFileSync(K,"utf8"),U=((Q=/.*-([^-]+)-\d+.css/.exec(W))==null?void 0:Q.at(1))||z(K,6);return L.includes(U)?L:`${L}
28
+ /*start:${U}-${W}*/
29
29
  ${st}
30
30
  /*end:${U}*/
31
- `},""),P=`l_${f}.css`,V=a.join(c,"css",P),q=`@layer l${f} { ${S}
32
- }`;return d.writeFileSync(V,q),`${$}
33
- @import url('./css/${P}');`},"");_+=l}d.writeFileSync(y,_);const x=Date.now()-n,E=x<200?"🔥":x<500?"🚀":x<1e3?"🎉":x<2e3?"🚗":x<5e3?"🤔":"🥴";it.info(`Generated CSS in ${x}ms! ${E}`)}catch(n){console.error(n)}},Ut=async(t,e)=>{try{const s=await A(t);if(Z(e)){const o=[],r=await ct(t),{contents:c}=await et(t,e,s);for(const[y,g]of Object.entries(c)){if(g.isKeyframes&&g.css){const p=`css/${`a_${g.animationName}.css`}`,N=a.join(s,p);d.writeFileSync(N,await g.css);return}if(g.isClassName){const i=g.generator._withBuildContext({name:y}),p=await i.css;if(!p)continue;o[0].push(i.cssFileName);const N=`css/${i.cssFileName}`,F=a.join(s,N);d.writeFileSync(F,p)}if(!g.generator)return;const u=g.generator._withBuildContext({name:y,config:r}),m=await u.css;if(!m)continue;const b=`css/${u.cssFileName}`,w=a.join(s,b);d.writeFileSync(w,m),o[u.priority]||(o[u.priority]=[]),o[u.priority].push(u.cssFileName)}if(r.importStrategy!=="component")o.forEach((y,g)=>{const u=`l_${g}.css`,m=a.join(s,"css",u);let b=d.readFileSync(m,"utf8");y.forEach(w=>{var F;const i=a.join(s,"css",w),p=((F=/.*-([^-]+)-\d+.css/.exec(w))==null?void 0:F.at(1))||z(i,6);if(!b.includes(p)){const D=d.readFileSync(i,"utf8"),O=`/*start:${p}*/
34
- ${D}
35
- /*end:${p}*/
36
- `;b=`${b.replace(/\}$/,"")}
31
+ `},""),x=`l_${u}.css`,V=c.join(a,"css",x),H=`@layer l${u} { ${S}
32
+ }`;return d.writeFileSync(V,H),`${w}
33
+ @import url('./css/${x}');`},"");_+=f}d.writeFileSync(h,_);const P=Date.now()-n,E=P<200?"🔥":P<500?"🚀":P<1e3?"🎉":P<2e3?"🚗":P<5e3?"🤔":"🥴";it.info(`Generated CSS in ${P}ms! ${E}`)}catch(n){console.error(n)}},Ut=async(t,e,s=lt())=>{try{const n=await A(t);if(q(e)){const r=[],a=await ct(t),{contents:h}=await et(t,e,n);for(const[F,l]of Object.entries(h)){if(l.isKeyframes&&l.css){const b=`css/${`a_${l.animationName}.css`}`,C=c.join(n,b);d.writeFileSync(C,await l.css);return}if(l.isClassName){const p=l.generator._withBuildContext({callerName:F,isProduction:s,config:a}),b=await p.css;if(!b)continue;r[0].push(p.cssFileName);const C=`css/${p.cssFileName}`,k=c.join(n,C);d.writeFileSync(k,b)}if(!l.generator)return;const y=l.generator._withBuildContext({callerName:F,isProduction:s,config:a}),$=await y.css;if(!$)continue;const m=`css/${y.cssFileName}`,i=c.join(n,m);d.writeFileSync(i,$),r[y.priority]||(r[y.priority]=[]),r[y.priority].push(y.cssFileName)}if(a.importStrategy!=="component")r.forEach((F,l)=>{const y=`l_${l}.css`,$=c.join(n,"css",y);let m=d.readFileSync($,"utf8");F.forEach(i=>{var k;const p=c.join(n,"css",i),b=((k=/.*-([^-]+)-\d+.css/.exec(i))==null?void 0:k.at(1))||z(p,6);if(!m.includes(b)){const O=d.readFileSync(p,"utf8"),_=`/*start:${b}-${i}*/
37
34
  ${O}
38
- }`}}),d.writeFileSync(m,b)});else{const y=o.flat().map(w=>`@import url('./${w}');`).join(`
39
- `),g=z(e,6),u=a.parse(e),m=R(u.name),b=a.join(s,`css/f_${m}-${g}.css`);d.writeFileSync(b,y)}}}catch(s){console.error(s)}},Qt=async(t,e,s=xt())=>{try{const n=await A(t);if(Z(e)){const r=d.readFileSync(e,"utf8");r.replace(/^(?!export\s)const\s.*/gm,m=>`export ${m}`)!==r&&await tt.writeFile(e,r);const y=await ct(t),{contents:g}=await et(t,e,n);let u=r;if(Object.entries(g).forEach(([m,b])=>{var f;if(b.isKeyframes||!b.generator)return;const w=b.generator._withBuildContext({name:m,config:y,prod:s}),i=new RegExp(`\\s${m}[=\\s]+[^()]+styled\\(([^,]+),`,"g").exec(r);if(!i)return console.error("Could not find the original declaration");const p=(f=i.at(1))==null?void 0:f.trim(),N=new RegExp(`\\s${m}[=\\s]+styled\\(`,"g").exec(u);if(!N)return console.error("Could not find the original declaration");const{index:F}=N;let D=!1;const O=setTimeout(()=>D=!0,5e3);let _=0,k=!1,x=0;for(;!k&&!D;){const S=u[F+_];S==="("&&x++,S===")"&&x--,x===0&&S===")"&&(k=!0),_>u.length&&(D=!0),_++}if(!D)clearTimeout(O);else throw new Error("Failed to find the end of the styled call and timed out");const E=F+_,l=u.slice(F,E),$=u,h=` ${m} = styled(${p}, "${w.classNames}", ${JSON.stringify(w.clientProps)});`;u=u.replace(l,h),$===u&&console.error("Minimize file failed to change content",{name:m,tagName:p})}),y.importStrategy==="component"){const m=z(e,6),b=a.parse(e);u=`import '../../saltygen/css/${`f_${R(b.name)}-${m}.css`}';
40
- ${u}`}return u=u.replace("{ styled }","{ styledClient as styled }"),u=u.replace("@salty-css/react/styled","@salty-css/react/styled-client"),u}}catch(n){console.error("Error in minimizeFile:",n)}},yt=async t=>{if(!t||t.includes("node_modules")||t.includes("saltygen"))return!1;if(t.includes("salty.config"))return!0;if(!Z(t))return!1;const n=await tt.readFile(t,"utf-8");return!!/.+define[A-Z]\w+/.test(n)},Nt=t=>({name:"stylegen",buildStart:()=>Kt(t),load:async e=>{if(Z(e))return await Qt(t,e)},handleHotUpdate:async({file:e,server:s})=>{await yt(e)&&await s.restart()},watchChange:{handler:async e=>{Z(e)&&(await yt(e)||await Ut(t,e))}}});exports.default=Nt;exports.saltyPlugin=Nt;
35
+ /*end:${b}*/
36
+ `;m=`${m.replace(/\}$/,"")}
37
+ ${_}
38
+ }`}}),d.writeFileSync($,m)});else{const F=r.flat().map(i=>`@import url('./${i}');`).join(`
39
+ `),l=z(e,6),y=c.parse(e),$=R(y.name),m=c.join(n,`css/f_${$}-${l}.css`);d.writeFileSync(m,F)}}}catch(n){console.error(n)}},Qt=async(t,e,s=lt())=>{try{const n=await A(t);if(q(e)){const r=d.readFileSync(e,"utf8");r.replace(/^(?!export\s)const\s.*/gm,y=>`export ${y}`)!==r&&await tt.writeFile(e,r);const h=await ct(t),{contents:F}=await et(t,e,n);let l=r;if(Object.entries(F).forEach(([y,$])=>{var u;if($.isKeyframes||!$.generator)return;const m=$.generator._withBuildContext({callerName:y,isProduction:s,config:h}),i=new RegExp(`\\s${y}[=\\s]+[^()]+styled\\(([^,]+),`,"g").exec(r);if(!i)return console.error("Could not find the original declaration");const p=(u=i.at(1))==null?void 0:u.trim(),b=new RegExp(`\\s${y}[=\\s]+styled\\(`,"g").exec(l);if(!b)return console.error("Could not find the original declaration");const{index:C}=b;let k=!1;const O=setTimeout(()=>k=!0,5e3);let _=0,D=!1,P=0;for(;!D&&!k;){const S=l[C+_];S==="("&&P++,S===")"&&P--,P===0&&S===")"&&(D=!0),_>l.length&&(k=!0),_++}if(!k)clearTimeout(O);else throw new Error("Failed to find the end of the styled call and timed out");const E=C+_,f=l.slice(C,E),w=l,g=` ${y} = styled(${p}, "${m.classNames}", ${JSON.stringify(m.clientProps)});`;l=l.replace(f,g),w===l&&console.error("Minimize file failed to change content",{name:y,tagName:p})}),h.importStrategy==="component"){const y=z(e,6),$=c.parse(e);l=`import '../../saltygen/css/${`f_${R($.name)}-${y}.css`}';
40
+ ${l}`}return l=l.replace("{ styled }","{ styledClient as styled }"),l=l.replace("@salty-css/react/styled","@salty-css/react/styled-client"),l}}catch(n){console.error("Error in minimizeFile:",n)}},mt=async t=>{if(!t||t.includes("node_modules")||t.includes("saltygen"))return!1;if(t.includes("salty.config"))return!0;if(!q(t))return!1;const n=await tt.readFile(t,"utf-8");return!!/.+define[A-Z]\w+/.test(n)},Pt=t=>({name:"stylegen",buildStart:()=>Kt(t),load:async e=>{if(q(e))return await Qt(t,e)},handleHotUpdate:async({file:e,server:s})=>{await mt(e)&&await s.restart()},watchChange:{handler:async e=>{q(e)&&(await mt(e)||await Ut(t,e))}}});exports.default=Pt;exports.saltyPlugin=Pt;
package/index.js CHANGED
@@ -1,13 +1,13 @@
1
- import * as $t from "esbuild";
1
+ import * as wt from "esbuild";
2
2
  import { execSync as _t } from "child_process";
3
3
  import { join as u, parse as et } from "path";
4
- import { existsSync as ct, mkdirSync as H, statSync as Et, readdirSync as Tt, readFileSync as M, writeFileSync as P } from "fs";
4
+ import { existsSync as ct, mkdirSync as I, statSync as Et, readdirSync as Tt, readFileSync as M, writeFileSync as D } from "fs";
5
5
  import { readFile as lt, writeFile as Ot } from "fs/promises";
6
6
  import { createLogger as Vt, format as it, transports as Mt } from "winston";
7
- const gt = (t) => String.fromCharCode(t + (t > 25 ? 39 : 97)), Rt = (t, e) => {
7
+ const ht = (t) => String.fromCharCode(t + (t > 25 ? 39 : 97)), Rt = (t, e) => {
8
8
  let s = "", n;
9
- for (n = Math.abs(t); n > 52; n = n / 52 | 0) s = gt(n % 52) + s;
10
- return s = gt(n % 52) + s, s.length < e ? s = s.padStart(e, "a") : s.length > e && (s = s.slice(-e)), s;
9
+ for (n = Math.abs(t); n > 52; n = n / 52 | 0) s = ht(n % 52) + s;
10
+ return s = ht(n % 52) + s, s.length < e ? s = s.padStart(e, "a") : s.length > e && (s = s.slice(-e)), s;
11
11
  }, Jt = (t, e) => {
12
12
  let s = e.length;
13
13
  for (; s; ) t = t * 33 ^ e.charCodeAt(--s);
@@ -25,12 +25,12 @@ const At = (t) => (e) => {
25
25
  const n = [];
26
26
  return Object.values(t).forEach((o) => {
27
27
  const { pattern: r, transform: a } = o;
28
- s = s.replace(r, (p) => {
29
- const { value: g, css: f } = a(p);
30
- return f && n.push(f), g;
28
+ s = s.replace(r, (h) => {
29
+ const { value: S, css: c } = a(h);
30
+ return c && n.push(c), S;
31
31
  });
32
32
  }), { transformed: s, additionalCss: n };
33
- }, wt = (t) => (e) => typeof e != "string" || !/\{[^{}]+\}/g.test(e) ? void 0 : { transformed: e.replace(/\{([^{}]+)\}/g, (...o) => `var(--${R(o[1].replaceAll(".", "-"))})`) }, Wt = wt(), zt = [
33
+ }, bt = (t) => (e) => typeof e != "string" || !/\{[^{}]+\}/g.test(e) ? void 0 : { transformed: e.replace(/\{([^{}]+)\}/g, (...o) => `var(--${R(o[1].replaceAll(".", "-"))})`) }, Wt = bt(), zt = [
34
34
  "top",
35
35
  "right",
36
36
  "bottom",
@@ -53,75 +53,75 @@ const At = (t) => (e) => {
53
53
  /.*font-size.*/
54
54
  ], vt = (t, e, s) => zt.some((o) => typeof o == "string" ? o === t : o.test(t)) ? `${e}px` : `${e}`, Zt = ["Webkit", "Moz", "ms", "O"], Ht = (t) => t.startsWith("-") ? t : Zt.some((e) => t.startsWith(e)) ? `-${R(t)}` : R(t), tt = async (t, e = "", s, n = !1) => {
55
55
  if (!t) throw new Error("No styles provided to parseStyles function!");
56
- const o = /* @__PURE__ */ new Set(), a = Object.entries(t).map(async ([y, i]) => {
57
- const d = y.trim(), x = Ht(d), S = (E, D = ";") => `${x}:${E}${D}`;
56
+ const o = /* @__PURE__ */ new Set(), a = Object.entries(t).map(async ([m, i]) => {
57
+ const d = m.trim(), w = Ht(d), j = (E, k = ";") => `${w}:${E}${k}`;
58
58
  if (typeof i == "function" && (i = i({ scope: e, config: s })), i instanceof Promise && (i = await i), typeof i == "object") {
59
59
  if (!i) return;
60
- if (i.isColor) return S(i.toString());
60
+ if (i.isColor) return j(i.toString());
61
61
  if (d === "defaultVariants") return;
62
62
  if (d === "variants") {
63
- const k = Object.entries(i);
64
- for (const [F, O] of k) {
63
+ const _ = Object.entries(i);
64
+ for (const [N, O] of _) {
65
65
  if (!O) return;
66
- const c = Object.entries(O);
67
- for (const [w, h] of c) {
68
- if (!h) return;
69
- const l = `${e}.${F}-${w}`;
70
- (await tt(h, l, s)).forEach((N) => o.add(N));
66
+ const l = Object.entries(O);
67
+ for (const [y, g] of l) {
68
+ if (!g) return;
69
+ const f = `${e}.${N}-${y}`;
70
+ (await tt(g, f, s)).forEach((x) => o.add(x));
71
71
  }
72
72
  }
73
73
  return;
74
74
  }
75
75
  if (d === "compoundVariants") {
76
- for (const k of i) {
77
- const { css: F, ...O } = k, c = Object.entries(O).reduce((h, [l, b]) => `${h}.${l}-${b}`, e);
78
- (await tt(F, c, s)).forEach((h) => o.add(h));
76
+ for (const _ of i) {
77
+ const { css: N, ...O } = _, l = Object.entries(O).reduce((g, [f, b]) => `${g}.${f}-${b}`, e);
78
+ (await tt(N, l, s)).forEach((g) => o.add(g));
79
79
  }
80
80
  return;
81
81
  }
82
82
  if (d.startsWith("@")) {
83
- const k = d, F = await Q(i, e, s), O = `${k} { ${F} }`;
83
+ const _ = d, N = await Q(i, e, s), O = `${_} { ${N} }`;
84
84
  o.add(O);
85
85
  return;
86
86
  }
87
- const E = y.includes("&") ? d.replace("&", e) : d.startsWith(":") ? `${e}${d}` : `${e} ${d}`;
88
- (await tt(i, E, s)).forEach((k) => o.add(k));
87
+ const E = m.includes("&") ? d.replace("&", e) : d.startsWith(":") ? `${e}${d}` : `${e} ${d}`;
88
+ (await tt(i, E, s)).forEach((_) => o.add(_));
89
89
  return;
90
90
  }
91
91
  if (typeof i == "number") {
92
- const E = vt(x, i);
93
- return S(E);
92
+ const E = vt(w, i);
93
+ return j(E);
94
94
  }
95
95
  if (typeof i != "string")
96
96
  if ("toString" in i) i = i.toString();
97
- else throw new Error(`Invalid value type for property ${x}`);
98
- return S(i);
99
- }), { modifiers: p } = {}, g = [wt(), At(p)], m = (await Promise.all(a).then((y) => Promise.all(
100
- y.map((i) => g.reduce(async (d, x) => {
101
- const S = await d;
102
- if (!S) return S;
103
- const _ = await x(S);
104
- if (!_) return S;
105
- const { transformed: E, additionalCss: D } = _;
106
- let k = "";
107
- if (D)
108
- for (const F of D)
109
- k += await Q(F, "");
110
- return `${k}${E}`;
97
+ else throw new Error(`Invalid value type for property ${w}`);
98
+ return j(i);
99
+ }), { modifiers: h } = {}, S = [bt(), At(h)], p = (await Promise.all(a).then((m) => Promise.all(
100
+ m.map((i) => S.reduce(async (d, w) => {
101
+ const j = await d;
102
+ if (!j) return j;
103
+ const P = await w(j);
104
+ if (!P) return j;
105
+ const { transformed: E, additionalCss: k } = P;
106
+ let _ = "";
107
+ if (k)
108
+ for (const N of k)
109
+ _ += await Q(N, "");
110
+ return `${_}${E}`;
111
111
  }, Promise.resolve(i)))
112
112
  ))).join(`
113
113
  `);
114
- if (!m.trim()) return o;
115
- const $ = e ? `${e} { ${m} }` : m;
114
+ if (!p.trim()) return o;
115
+ const $ = e ? `${e} { ${p} }` : p;
116
116
  return o.add($), o;
117
117
  }, Q = async (t, e, s, n = !1) => [...await tt(t, e, s, n)].join(`
118
- `), bt = async (t, e = []) => {
118
+ `), Ct = async (t, e = []) => {
119
119
  if (!t) return "";
120
120
  const s = [], n = {};
121
121
  for (const [o, r] of Object.entries(t))
122
122
  if (typeof r != "function") if (r && typeof r == "object") {
123
- const a = o.trim(), p = await bt(r, [...e, a]);
124
- s.push(p);
123
+ const a = o.trim(), h = await Ct(r, [...e, a]);
124
+ s.push(h);
125
125
  } else
126
126
  n[o] = r;
127
127
  if (Object.keys(n).length) {
@@ -130,15 +130,15 @@ const At = (t) => (e) => {
130
130
  }
131
131
  return s.join(`
132
132
  `);
133
- }, It = (t) => t ? Object.entries(t).reduce((e, [s, n]) => (typeof n == "function" ? e[s] = "any" : typeof n == "object" && (e[s] = Ct(n).map((o) => `"${o}"`).join(" | ")), e), {}) : {}, Ct = (t, e = "", s = /* @__PURE__ */ new Set()) => t ? (Object.entries(t).forEach(([n, o]) => {
133
+ }, It = (t) => t ? Object.entries(t).reduce((e, [s, n]) => (typeof n == "function" ? e[s] = "any" : typeof n == "object" && (e[s] = St(n).map((o) => `"${o}"`).join(" | ")), e), {}) : {}, St = (t, e = "", s = /* @__PURE__ */ new Set()) => t ? (Object.entries(t).forEach(([n, o]) => {
134
134
  const r = e ? `${e}.${n}` : n;
135
- return typeof o == "object" ? Ct(o, r, s) : s.add(e);
136
- }), [...s]) : [], St = (t) => {
135
+ return typeof o == "object" ? St(o, r, s) : s.add(e);
136
+ }), [...s]) : [], jt = (t) => {
137
137
  if (!t || t === "/") throw new Error("Could not find package.json file");
138
138
  const e = u(t, "package.json");
139
- return ct(e) ? e : St(u(t, ".."));
139
+ return ct(e) ? e : jt(u(t, ".."));
140
140
  }, Bt = async (t) => {
141
- const e = St(t);
141
+ const e = jt(t);
142
142
  return await lt(e, "utf-8").then(JSON.parse).catch(() => {
143
143
  });
144
144
  }, Gt = async (t) => {
@@ -146,18 +146,18 @@ const At = (t) => (e) => {
146
146
  if (e)
147
147
  return e.type;
148
148
  };
149
- let Z;
150
- const jt = async (t) => {
151
- if (Z) return Z;
149
+ let H;
150
+ const Ft = async (t) => {
151
+ if (H) return H;
152
152
  const e = await Gt(t);
153
- return e === "module" ? Z = "esm" : (e === "commonjs" || import.meta.url.endsWith(".cjs")) && (Z = "cjs"), Z || "esm";
153
+ return e === "module" ? H = "esm" : (e === "commonjs" || import.meta.url.endsWith(".cjs")) && (H = "cjs"), H || "esm";
154
154
  }, at = Vt({
155
155
  level: "debug",
156
156
  format: it.combine(it.colorize(), it.cli()),
157
157
  transports: [new Mt.Console({})]
158
158
  });
159
- function Ft(t) {
160
- return t ? typeof t != "string" ? Ft(String(t)) : t.replace(/[\s-]/g, ".").replace(/[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g, (e, s) => (s > 0 ? "." : "") + e.toLowerCase()) : "";
159
+ function Nt(t) {
160
+ return t ? typeof t != "string" ? Nt(String(t)) : t.replace(/[\s-]/g, ".").replace(/[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g, (e, s) => (s > 0 ? "." : "") + e.toLowerCase()) : "";
161
161
  }
162
162
  const Kt = {
163
163
  /** Set box model to border-box */
@@ -205,7 +205,7 @@ const Kt = {
205
205
  fontSize: "100%",
206
206
  lineHeight: "1.15em"
207
207
  }
208
- }, I = (...t) => t.flat().reduce((e, s) => s != null && s._current ? { ...e, ...s._current } : { ...e, ...s }, {}), Lt = (...t) => t.flat().reduce((e, s) => ({ ...e, ...s._children }), {}), W = {
208
+ }, B = (...t) => t.flat().reduce((e, s) => s != null && s._current ? { ...e, ...s._current } : { ...e, ...s }, {}), Lt = (...t) => t.flat().reduce((e, s) => ({ ...e, ...s._children }), {}), W = {
209
209
  externalModules: [],
210
210
  rcFile: void 0,
211
211
  destDir: void 0
@@ -219,19 +219,19 @@ const Kt = {
219
219
  if (W.destDir) return W.destDir;
220
220
  const e = await ft(t), s = u(t, (e == null ? void 0 : e.saltygenDir) || "saltygen");
221
221
  return W.destDir = s, s;
222
- }, Nt = ["salty", "css", "styles", "styled"], Qt = (t = []) => new RegExp(`\\.(${[...Nt, ...t].join("|")})\\.`), B = (t, e = []) => Qt(e).test(t), Pt = async (t) => {
222
+ }, Pt = ["salty", "css", "styles", "styled"], Qt = (t = []) => new RegExp(`\\.(${[...Pt, ...t].join("|")})\\.`), G = (t, e = []) => Qt(e).test(t), kt = async (t) => {
223
223
  if (W.rcFile) return W.rcFile;
224
224
  if (t === "/") throw new Error("Could not find .saltyrc.json file");
225
225
  const e = u(t, ".saltyrc.json"), s = await lt(e, "utf-8").then(JSON.parse).catch(() => {
226
226
  });
227
- return s ? (W.rcFile = s, s) : Pt(u(t, ".."));
227
+ return s ? (W.rcFile = s, s) : kt(u(t, ".."));
228
228
  }, ft = async (t) => {
229
229
  var n, o;
230
- const e = await Pt(t), s = (n = e.projects) == null ? void 0 : n.find((r) => t.endsWith(r.dir || ""));
230
+ const e = await kt(t), s = (n = e.projects) == null ? void 0 : n.find((r) => t.endsWith(r.dir || ""));
231
231
  return s || ((o = e.projects) == null ? void 0 : o.find((r) => r.dir === e.defaultProject));
232
232
  }, Ut = async (t) => {
233
- const e = await ft(t), s = await v(t), n = u(t, (e == null ? void 0 : e.configDir) || "", "salty.config.ts"), o = u(s, "salty.config.js"), r = await jt(t), a = xt(n);
234
- await $t.build({
233
+ const e = await ft(t), s = await v(t), n = u(t, (e == null ? void 0 : e.configDir) || "", "salty.config.ts"), o = u(s, "salty.config.js"), r = await Ft(t), a = xt(n);
234
+ await wt.build({
235
235
  entryPoints: [n],
236
236
  minify: !0,
237
237
  treeShaking: !0,
@@ -240,10 +240,10 @@ const Kt = {
240
240
  format: r,
241
241
  external: a
242
242
  });
243
- const p = Date.now(), { config: g } = await import(`${o}?t=${p}`);
244
- return g;
243
+ const h = Date.now(), { config: S } = await import(`${o}?t=${h}`);
244
+ return S;
245
245
  }, qt = async (t, e) => {
246
- var dt, pt;
246
+ var pt, mt;
247
247
  const s = await v(t), n = {
248
248
  mediaQueries: [],
249
249
  globalStyles: [],
@@ -252,62 +252,62 @@ const Kt = {
252
252
  };
253
253
  await Promise.all(
254
254
  [...e].map(async (C) => {
255
- const { contents: j, outputFilePath: A } = await st(t, C, s);
256
- Object.entries(j).forEach(([T, V]) => {
255
+ const { contents: F, outputFilePath: A } = await st(t, C, s);
256
+ Object.entries(F).forEach(([T, V]) => {
257
257
  V.isMedia ? n.mediaQueries.push([T, V]) : V.isGlobalDefine ? n.globalStyles.push(V) : V.isDefineVariables ? n.variables.push(V) : V.isDefineTemplates && n.templates.push(V._setPath(A));
258
258
  });
259
259
  })
260
260
  );
261
- const o = await Ut(t), r = { ...o }, a = /* @__PURE__ */ new Set(), p = (C, j = []) => C ? Object.entries(C).flatMap(([A, T]) => {
261
+ const o = await Ut(t), r = { ...o }, a = /* @__PURE__ */ new Set(), h = (C, F = []) => C ? Object.entries(C).flatMap(([A, T]) => {
262
262
  if (!T) return;
263
- if (typeof T == "object") return p(T, [...j, A]);
264
- const V = Ft(A), ot = R(A), rt = [...j, V].join(".");
263
+ if (typeof T == "object") return h(T, [...F, A]);
264
+ const V = Nt(A), ot = R(A), rt = [...F, V].join(".");
265
265
  a.add(`"${rt}"`);
266
- const Y = [...j.map(R), ot].join("-"), mt = Wt(T);
267
- return mt ? `--${Y}: ${mt.transformed};` : `--${Y}: ${T};`;
268
- }) : [], g = (C) => C ? Object.entries(C).flatMap(([j, A]) => {
269
- const T = p(A);
270
- return j === "base" ? T.join("") : `${j} { ${T.join("")} }`;
271
- }) : [], f = (C) => C ? Object.entries(C).flatMap(([j, A]) => Object.entries(A).flatMap(([T, V]) => {
272
- const ot = p(V, [j]), rt = `.${j}-${T}, [data-${j}="${T}"]`, Y = ot.join("");
266
+ const Y = [...F.map(R), ot].join("-"), gt = Wt(T);
267
+ return gt ? `--${Y}: ${gt.transformed};` : `--${Y}: ${T};`;
268
+ }) : [], S = (C) => C ? Object.entries(C).flatMap(([F, A]) => {
269
+ const T = h(A);
270
+ return F === "base" ? T.join("") : `${F} { ${T.join("")} }`;
271
+ }) : [], c = (C) => C ? Object.entries(C).flatMap(([F, A]) => Object.entries(A).flatMap(([T, V]) => {
272
+ const ot = h(V, [F]), rt = `.${F}-${T}, [data-${F}="${T}"]`, Y = ot.join("");
273
273
  return `${rt} { ${Y} }`;
274
- })) : [], m = (C) => ({ ...C, responsive: void 0, conditional: void 0 }), $ = (C) => n.variables.map((j) => C === "static" ? m(j._current) : j._current[C]), y = I(m(o.variables), $("static")), i = p(y), d = I((dt = o.variables) == null ? void 0 : dt.responsive, $("responsive")), x = g(d), S = I((pt = o.variables) == null ? void 0 : pt.conditional, $("conditional")), _ = f(S), E = u(s, "css/_variables.css"), D = `:root { ${i.join("")} ${x.join("")} } ${_.join("")}`;
275
- P(E, D), r.staticVariables = y;
276
- const k = u(s, "css/_global.css"), F = I(o.global, n.globalStyles), O = await Q(F, "");
277
- P(k, `@layer global { ${O} }`);
278
- const c = u(s, "css/_reset.css"), h = o.reset === "none" ? {} : typeof o.reset == "object" ? o.reset : Kt, l = await Q(h, "");
279
- P(c, `@layer reset { ${l} }`);
280
- const b = u(s, "css/_templates.css"), N = I(o.templates, n.templates), J = await bt(N), G = It(N);
281
- P(b, `@layer templates { ${J} }`), r.templates = N;
282
- const K = Lt(n.templates);
283
- r.templatePaths = Object.fromEntries(Object.entries(K).map(([C, j]) => [C, j._path]));
284
- const { mediaQueries: L } = n;
285
- r.mediaQueries = Object.fromEntries(L.map(([C, j]) => [`@${C}`, j]));
286
- const U = L.map(([C]) => `'@${C}'`).join(" | "), nt = u(s, "types/css-tokens.d.ts"), X = `
274
+ })) : [], p = (C) => ({ ...C, responsive: void 0, conditional: void 0 }), $ = (C) => n.variables.map((F) => C === "static" ? p(F._current) : F._current[C]), m = B(p(o.variables), $("static")), i = h(m), d = B((pt = o.variables) == null ? void 0 : pt.responsive, $("responsive")), w = S(d), j = B((mt = o.variables) == null ? void 0 : mt.conditional, $("conditional")), P = c(j), E = u(s, "css/_variables.css"), k = `:root { ${i.join("")} ${w.join("")} } ${P.join("")}`;
275
+ D(E, k), r.staticVariables = m;
276
+ const _ = u(s, "css/_global.css"), N = B(o.global, n.globalStyles), O = await Q(N, "");
277
+ D(_, `@layer global { ${O} }`);
278
+ const l = u(s, "css/_reset.css"), g = o.reset === "none" ? {} : typeof o.reset == "object" ? o.reset : Kt, f = await Q(g, "");
279
+ D(l, `@layer reset { ${f} }`);
280
+ const b = u(s, "css/_templates.css"), x = B(o.templates, n.templates), J = await Ct(x), K = It(x);
281
+ D(b, `@layer templates { ${J} }`), r.templates = x;
282
+ const L = Lt(n.templates);
283
+ r.templatePaths = Object.fromEntries(Object.entries(L).map(([C, F]) => [C, F._path]));
284
+ const { mediaQueries: Z } = n;
285
+ r.mediaQueries = Object.fromEntries(Z.map(([C, F]) => [`@${C}`, F]));
286
+ const U = Z.map(([C]) => `'@${C}'`).join(" | "), nt = u(s, "types/css-tokens.d.ts"), X = `
287
287
  // Variable types
288
288
  type VariableTokens = ${[...a].join("|")};
289
289
  type PropertyValueToken = \`{\${VariableTokens}}\`;
290
290
 
291
291
  // Template types
292
292
  type TemplateTokens = {
293
- ${Object.entries(G).map(([C, j]) => `${C}?: ${j}`).join(`
293
+ ${Object.entries(K).map(([C, F]) => `${C}?: ${F}`).join(`
294
294
  `)}
295
295
  }
296
296
 
297
297
  // Media query types
298
298
  type MediaQueryKeys = ${U || "''"};
299
299
  `;
300
- P(nt, X);
300
+ D(nt, X);
301
301
  const Dt = u(s, "cache/config-cache.json");
302
- P(Dt, JSON.stringify(r, null, 2));
303
- }, ht = (t) => t.replace(/styled\(([^"'`{,]+),/g, (e, s) => {
302
+ D(Dt, JSON.stringify(r, null, 2));
303
+ }, yt = (t) => t.replace(/styled\(([^"'`{,]+),/g, (e, s) => {
304
304
  if (/^['"`]/.test(s)) return e;
305
305
  const o = new RegExp(`import[^;]*${s}[,\\s{][^;]*from\\s?([^{};]+);`);
306
306
  if (!o.test(t)) return e;
307
307
  const a = o.exec(t);
308
308
  if (a) {
309
- const p = a.at(1);
310
- if (Nt.some((f) => p == null ? void 0 : p.includes(f))) return e;
309
+ const h = a.at(1);
310
+ if (Pt.some((c) => h == null ? void 0 : h.includes(c))) return e;
311
311
  }
312
312
  return "styled('div',";
313
313
  }), Xt = (t, e) => {
@@ -323,12 +323,12 @@ ${t}`;
323
323
  }
324
324
  }, st = async (t, e, s) => {
325
325
  const n = z(e), o = u(s, "./temp");
326
- ct(o) || H(o);
326
+ ct(o) || I(o);
327
327
  const r = et(e);
328
328
  let a = M(e, "utf8");
329
- a = ht(a), a = Xt(a, t);
330
- const p = u(s, "js", n + ".js"), g = await ft(t), f = u(t, (g == null ? void 0 : g.configDir) || "", "salty.config.ts"), m = xt(f), $ = await jt(t);
331
- await $t.build({
329
+ a = yt(a), a = Xt(a, t);
330
+ const h = u(s, "js", n + ".js"), S = await ft(t), c = u(t, (S == null ? void 0 : S.configDir) || "", "salty.config.ts"), p = xt(c), $ = await Ft(t);
331
+ await wt.build({
332
332
  stdin: {
333
333
  contents: a,
334
334
  sourcefile: r.base,
@@ -338,273 +338,276 @@ ${t}`;
338
338
  minify: !1,
339
339
  treeShaking: !0,
340
340
  bundle: !0,
341
- outfile: p,
341
+ outfile: h,
342
342
  format: $,
343
343
  target: ["node20"],
344
344
  keepNames: !0,
345
- external: m,
345
+ external: p,
346
346
  packages: "external",
347
347
  plugins: [
348
348
  {
349
349
  name: "test",
350
350
  setup: (d) => {
351
- d.onLoad({ filter: /.*\.css|salty|styles|styled\.ts/ }, (x) => {
352
- const S = M(x.path, "utf8");
353
- return { contents: ht(S), loader: "ts" };
351
+ d.onLoad({ filter: /.*\.css|salty|styles|styled\.ts/ }, (w) => {
352
+ const j = M(w.path, "utf8");
353
+ return { contents: yt(j), loader: "ts" };
354
354
  });
355
355
  }
356
356
  }
357
357
  ]
358
358
  });
359
- const y = Date.now();
360
- return { contents: await import(`${p}?t=${y}`), outputFilePath: p };
359
+ const m = Date.now();
360
+ return { contents: await import(`${h}?t=${m}`), outputFilePath: h };
361
361
  }, Yt = async (t) => {
362
362
  const e = await v(t), s = u(e, "cache/config-cache.json"), n = M(s, "utf8");
363
363
  if (!n) throw new Error("Could not find config cache file");
364
364
  return JSON.parse(n);
365
365
  }, ut = async (t) => {
366
366
  const e = await Yt(t), s = await v(t), n = u(s, "salty.config.js"), o = Date.now(), { config: r } = await import(`${n}?t=${o}`);
367
- return I(r, e);
368
- }, kt = () => {
367
+ return B(r, e);
368
+ }, dt = () => {
369
369
  try {
370
370
  return process.env.NODE_ENV === "production";
371
371
  } catch {
372
372
  return !1;
373
373
  }
374
- }, te = async (t, e = kt(), s = !0) => {
374
+ }, te = async (t, e = dt(), s = !0) => {
375
375
  try {
376
376
  const n = Date.now();
377
377
  e ? at.info("Generating CSS in production mode! 🔥") : at.info("Generating CSS in development mode! 🚀");
378
- const o = [], r = [], a = await v(t), p = u(a, "index.css");
378
+ const o = [], r = [], a = await v(t), h = u(a, "index.css");
379
379
  s && (() => {
380
- ct(a) && _t("rm -rf " + a), H(a, { recursive: !0 }), H(u(a, "css")), H(u(a, "types")), H(u(a, "js")), H(u(a, "cache"));
380
+ ct(a) && _t("rm -rf " + a), I(a, { recursive: !0 }), I(u(a, "css")), I(u(a, "types")), I(u(a, "js")), I(u(a, "cache"));
381
381
  })();
382
- const f = /* @__PURE__ */ new Set(), m = /* @__PURE__ */ new Set();
383
- async function $(c) {
384
- const w = ["node_modules", "saltygen"], h = Et(c);
385
- if (h.isDirectory()) {
386
- const l = Tt(c);
387
- if (w.some((N) => c.includes(N))) return;
388
- await Promise.all(l.map((N) => $(u(c, N))));
389
- } else if (h.isFile() && B(c)) {
390
- f.add(c);
391
- const b = M(c, "utf8");
392
- /define[\w\d]+\(/.test(b) && m.add(c);
382
+ const c = /* @__PURE__ */ new Set(), p = /* @__PURE__ */ new Set();
383
+ async function $(l) {
384
+ const y = ["node_modules", "saltygen"], g = Et(l);
385
+ if (g.isDirectory()) {
386
+ const f = Tt(l);
387
+ if (y.some((x) => l.includes(x))) return;
388
+ await Promise.all(f.map((x) => $(u(l, x))));
389
+ } else if (g.isFile() && G(l)) {
390
+ c.add(l);
391
+ const b = M(l, "utf8");
392
+ /define[\w\d]+\(/.test(b) && p.add(l);
393
393
  }
394
394
  }
395
- await $(t), await qt(t, m);
396
- const y = {
395
+ await $(t), await qt(t, p);
396
+ const m = {
397
397
  keyframes: [],
398
398
  components: [],
399
399
  classNames: []
400
400
  };
401
401
  await Promise.all(
402
- [...f].map(async (c) => {
403
- const { contents: w } = await st(t, c, a);
404
- Object.entries(w).forEach(([h, l]) => {
405
- l.isKeyframes ? y.keyframes.push({
406
- value: l,
407
- src: c,
408
- name: h
409
- }) : l.isClassName ? y.classNames.push({
410
- ...l,
411
- src: c,
412
- name: h
413
- }) : l.generator && y.components.push({
414
- ...l,
415
- src: c,
416
- name: h
402
+ [...c].map(async (l) => {
403
+ const { contents: y } = await st(t, l, a);
404
+ Object.entries(y).forEach(([g, f]) => {
405
+ f.isKeyframes ? m.keyframes.push({
406
+ value: f,
407
+ src: l,
408
+ name: g
409
+ }) : f.isClassName ? m.classNames.push({
410
+ ...f,
411
+ src: l,
412
+ name: g
413
+ }) : f.generator && m.components.push({
414
+ ...f,
415
+ src: l,
416
+ name: g
417
417
  });
418
418
  });
419
419
  })
420
420
  );
421
421
  const i = await ut(t);
422
- for (const c of y.keyframes) {
423
- const { value: w } = c, h = `a_${w.animationName}.css`, l = `css/${h}`, b = u(a, l);
424
- o.push(h), P(b, w.css);
422
+ for (const l of m.keyframes) {
423
+ const { value: y } = l, g = `a_${y.animationName}.css`, f = `css/${g}`, b = u(a, f);
424
+ o.push(g), D(b, y.css);
425
425
  }
426
426
  const d = {};
427
- for (const c of y.components) {
428
- const { src: w, name: h } = c, l = c.generator._withBuildContext({
429
- callerName: h,
427
+ for (const l of m.components) {
428
+ const { src: y, name: g } = l, f = l.generator._withBuildContext({
429
+ callerName: g,
430
430
  isProduction: e,
431
431
  config: i
432
432
  });
433
- r[l.priority] || (r[l.priority] = []);
434
- const b = await l.css;
433
+ r[f.priority] || (r[f.priority] = []);
434
+ const b = await f.css;
435
435
  if (!b) continue;
436
- r[l.priority].push(l.cssFileName);
437
- const N = `css/${l.cssFileName}`, J = u(a, N);
438
- P(J, b), i.importStrategy === "component" && (d[w] ? d[w].push(l.cssFileName) : d[w] = [l.cssFileName]);
436
+ r[f.priority].push(f.cssFileName);
437
+ const x = `css/${f.cssFileName}`, J = u(a, x);
438
+ D(J, b), i.importStrategy === "component" && (d[y] ? d[y].push(f.cssFileName) : d[y] = [f.cssFileName]);
439
439
  }
440
- for (const c of y.classNames) {
441
- const { src: w, name: h } = c, l = c.generator._withBuildContext({
442
- callerName: h,
440
+ for (const l of m.classNames) {
441
+ const { src: y, name: g } = l, f = l.generator._withBuildContext({
442
+ callerName: g,
443
443
  isProduction: e,
444
444
  config: i
445
- }), b = await l.css;
445
+ }), b = await f.css;
446
446
  if (!b) continue;
447
- r[0].push(l.cssFileName);
448
- const N = `css/${l.cssFileName}`, J = u(a, N);
449
- P(J, b), i.importStrategy === "component" && (d[w] ? d[w].push(l.cssFileName) : d[w] = [l.cssFileName]);
447
+ r[0].push(f.cssFileName);
448
+ const x = `css/${f.cssFileName}`, J = u(a, x);
449
+ D(J, b), i.importStrategy === "component" && (d[y] ? d[y].push(f.cssFileName) : d[y] = [f.cssFileName]);
450
450
  }
451
- i.importStrategy === "component" && Object.entries(d).forEach(([c, w]) => {
452
- const h = w.map((G) => `@import url('./${G}');`).join(`
453
- `), l = z(c, 6), b = et(c), N = R(b.name), J = u(a, `css/f_${N}-${l}.css`);
454
- P(J, h);
451
+ i.importStrategy === "component" && Object.entries(d).forEach(([l, y]) => {
452
+ const g = y.map((K) => `@import url('./${K}');`).join(`
453
+ `), f = z(l, 6), b = et(l), x = R(b.name), J = u(a, `css/f_${x}-${f}.css`);
454
+ D(J, g);
455
455
  });
456
- const x = o.map((c) => `@import url('./css/${c}');`).join(`
456
+ const w = o.map((l) => `@import url('./css/${l}');`).join(`
457
457
  `);
458
- let D = `@layer reset, global, templates, l0, l1, l2, l3, l4, l5, l6, l7, l8;
458
+ let k = `@layer reset, global, templates, l0, l1, l2, l3, l4, l5, l6, l7, l8;
459
459
 
460
- ${["_variables.css", "_reset.css", "_global.css", "_templates.css"].filter((c) => {
460
+ ${["_variables.css", "_reset.css", "_global.css", "_templates.css"].filter((l) => {
461
461
  try {
462
- return M(u(a, "css", c), "utf8").length > 0;
462
+ return M(u(a, "css", l), "utf8").length > 0;
463
463
  } catch {
464
464
  return !1;
465
465
  }
466
- }).map((c) => `@import url('./css/${c}');`).join(`
466
+ }).map((l) => `@import url('./css/${l}');`).join(`
467
467
  `)}
468
- ${x}`;
468
+ ${w}`;
469
469
  if (i.importStrategy !== "component") {
470
- const c = r.reduce((w, h, l) => {
471
- const b = h.reduce((K, L) => {
470
+ const l = r.reduce((y, g, f) => {
471
+ const b = g.reduce((L, Z) => {
472
472
  var X;
473
- const U = u(a, "css", L), nt = M(U, "utf8"), q = ((X = /.*-([^-]+)-\d+.css/.exec(L)) == null ? void 0 : X.at(1)) || z(U, 6);
474
- return K.includes(q) ? K : `${K}
475
- /*start:${q}*/
473
+ const U = u(a, "css", Z), nt = M(U, "utf8"), q = ((X = /.*-([^-]+)-\d+.css/.exec(Z)) == null ? void 0 : X.at(1)) || z(U, 6);
474
+ return L.includes(q) ? L : `${L}
475
+ /*start:${q}-${Z}*/
476
476
  ${nt}
477
477
  /*end:${q}*/
478
478
  `;
479
- }, ""), N = `l_${l}.css`, J = u(a, "css", N), G = `@layer l${l} { ${b}
479
+ }, ""), x = `l_${f}.css`, J = u(a, "css", x), K = `@layer l${f} { ${b}
480
480
  }`;
481
- return P(J, G), `${w}
482
- @import url('./css/${N}');`;
481
+ return D(J, K), `${y}
482
+ @import url('./css/${x}');`;
483
483
  }, "");
484
- D += c;
484
+ k += l;
485
485
  }
486
- P(p, D);
487
- const F = Date.now() - n, O = F < 200 ? "🔥" : F < 500 ? "🚀" : F < 1e3 ? "🎉" : F < 2e3 ? "🚗" : F < 5e3 ? "🤔" : "🥴";
488
- at.info(`Generated CSS in ${F}ms! ${O}`);
486
+ D(h, k);
487
+ const N = Date.now() - n, O = N < 200 ? "🔥" : N < 500 ? "🚀" : N < 1e3 ? "🎉" : N < 2e3 ? "🚗" : N < 5e3 ? "🤔" : "🥴";
488
+ at.info(`Generated CSS in ${N}ms! ${O}`);
489
489
  } catch (n) {
490
490
  console.error(n);
491
491
  }
492
- }, ee = async (t, e) => {
492
+ }, ee = async (t, e, s = dt()) => {
493
493
  try {
494
- const s = await v(t);
495
- if (B(e)) {
496
- const o = [], r = await ut(t), { contents: a } = await st(t, e, s);
497
- for (const [p, g] of Object.entries(a)) {
498
- if (g.isKeyframes && g.css) {
499
- const d = `css/${`a_${g.animationName}.css`}`, x = u(s, d);
500
- P(x, await g.css);
494
+ const n = await v(t);
495
+ if (G(e)) {
496
+ const r = [], a = await ut(t), { contents: h } = await st(t, e, n);
497
+ for (const [S, c] of Object.entries(h)) {
498
+ if (c.isKeyframes && c.css) {
499
+ const w = `css/${`a_${c.animationName}.css`}`, j = u(n, w);
500
+ D(j, await c.css);
501
501
  return;
502
502
  }
503
- if (g.isClassName) {
504
- const i = g.generator._withBuildContext({
505
- name: p
506
- }), d = await i.css;
507
- if (!d) continue;
508
- o[0].push(i.cssFileName);
509
- const x = `css/${i.cssFileName}`, S = u(s, x);
510
- P(S, d);
503
+ if (c.isClassName) {
504
+ const d = c.generator._withBuildContext({
505
+ callerName: S,
506
+ isProduction: s,
507
+ config: a
508
+ }), w = await d.css;
509
+ if (!w) continue;
510
+ r[0].push(d.cssFileName);
511
+ const j = `css/${d.cssFileName}`, P = u(n, j);
512
+ D(P, w);
511
513
  }
512
- if (!g.generator) return;
513
- const f = g.generator._withBuildContext({
514
- name: p,
515
- config: r
516
- }), m = await f.css;
517
- if (!m) continue;
518
- const $ = `css/${f.cssFileName}`, y = u(s, $);
519
- P(y, m), o[f.priority] || (o[f.priority] = []), o[f.priority].push(f.cssFileName);
514
+ if (!c.generator) return;
515
+ const p = c.generator._withBuildContext({
516
+ callerName: S,
517
+ isProduction: s,
518
+ config: a
519
+ }), $ = await p.css;
520
+ if (!$) continue;
521
+ const m = `css/${p.cssFileName}`, i = u(n, m);
522
+ D(i, $), r[p.priority] || (r[p.priority] = []), r[p.priority].push(p.cssFileName);
520
523
  }
521
- if (r.importStrategy !== "component")
522
- o.forEach((p, g) => {
523
- const f = `l_${g}.css`, m = u(s, "css", f);
524
- let $ = M(m, "utf8");
525
- p.forEach((y) => {
526
- var S;
527
- const i = u(s, "css", y), d = ((S = /.*-([^-]+)-\d+.css/.exec(y)) == null ? void 0 : S.at(1)) || z(i, 6);
528
- if (!$.includes(d)) {
529
- const _ = M(i, "utf8"), E = `/*start:${d}*/
530
- ${_}
531
- /*end:${d}*/
532
- `;
533
- $ = `${$.replace(/\}$/, "")}
524
+ if (a.importStrategy !== "component")
525
+ r.forEach((S, c) => {
526
+ const p = `l_${c}.css`, $ = u(n, "css", p);
527
+ let m = M($, "utf8");
528
+ S.forEach((i) => {
529
+ var P;
530
+ const d = u(n, "css", i), w = ((P = /.*-([^-]+)-\d+.css/.exec(i)) == null ? void 0 : P.at(1)) || z(d, 6);
531
+ if (!m.includes(w)) {
532
+ const E = M(d, "utf8"), k = `/*start:${w}-${i}*/
534
533
  ${E}
534
+ /*end:${w}*/
535
+ `;
536
+ m = `${m.replace(/\}$/, "")}
537
+ ${k}
535
538
  }`;
536
539
  }
537
- }), P(m, $);
540
+ }), D($, m);
538
541
  });
539
542
  else {
540
- const p = o.flat().map((y) => `@import url('./${y}');`).join(`
541
- `), g = z(e, 6), f = et(e), m = R(f.name), $ = u(s, `css/f_${m}-${g}.css`);
542
- P($, p);
543
+ const S = r.flat().map((i) => `@import url('./${i}');`).join(`
544
+ `), c = z(e, 6), p = et(e), $ = R(p.name), m = u(n, `css/f_${$}-${c}.css`);
545
+ D(m, S);
543
546
  }
544
547
  }
545
- } catch (s) {
546
- console.error(s);
548
+ } catch (n) {
549
+ console.error(n);
547
550
  }
548
- }, se = async (t, e, s = kt()) => {
551
+ }, se = async (t, e, s = dt()) => {
549
552
  try {
550
553
  const n = await v(t);
551
- if (B(e)) {
554
+ if (G(e)) {
552
555
  const r = M(e, "utf8");
553
- r.replace(/^(?!export\s)const\s.*/gm, (m) => `export ${m}`) !== r && await Ot(e, r);
554
- const p = await ut(t), { contents: g } = await st(t, e, n);
555
- let f = r;
556
- if (Object.entries(g).forEach(([m, $]) => {
557
- var l;
556
+ r.replace(/^(?!export\s)const\s.*/gm, (p) => `export ${p}`) !== r && await Ot(e, r);
557
+ const h = await ut(t), { contents: S } = await st(t, e, n);
558
+ let c = r;
559
+ if (Object.entries(S).forEach(([p, $]) => {
560
+ var f;
558
561
  if ($.isKeyframes || !$.generator) return;
559
- const y = $.generator._withBuildContext({
560
- name: m,
561
- config: p,
562
- prod: s
563
- }), i = new RegExp(`\\s${m}[=\\s]+[^()]+styled\\(([^,]+),`, "g").exec(r);
562
+ const m = $.generator._withBuildContext({
563
+ callerName: p,
564
+ isProduction: s,
565
+ config: h
566
+ }), i = new RegExp(`\\s${p}[=\\s]+[^()]+styled\\(([^,]+),`, "g").exec(r);
564
567
  if (!i) return console.error("Could not find the original declaration");
565
- const d = (l = i.at(1)) == null ? void 0 : l.trim(), x = new RegExp(`\\s${m}[=\\s]+styled\\(`, "g").exec(f);
566
- if (!x) return console.error("Could not find the original declaration");
567
- const { index: S } = x;
568
- let _ = !1;
569
- const E = setTimeout(() => _ = !0, 5e3);
570
- let D = 0, k = !1, F = 0;
571
- for (; !k && !_; ) {
572
- const b = f[S + D];
573
- b === "(" && F++, b === ")" && F--, F === 0 && b === ")" && (k = !0), D > f.length && (_ = !0), D++;
568
+ const d = (f = i.at(1)) == null ? void 0 : f.trim(), w = new RegExp(`\\s${p}[=\\s]+styled\\(`, "g").exec(c);
569
+ if (!w) return console.error("Could not find the original declaration");
570
+ const { index: j } = w;
571
+ let P = !1;
572
+ const E = setTimeout(() => P = !0, 5e3);
573
+ let k = 0, _ = !1, N = 0;
574
+ for (; !_ && !P; ) {
575
+ const b = c[j + k];
576
+ b === "(" && N++, b === ")" && N--, N === 0 && b === ")" && (_ = !0), k > c.length && (P = !0), k++;
574
577
  }
575
- if (!_) clearTimeout(E);
578
+ if (!P) clearTimeout(E);
576
579
  else throw new Error("Failed to find the end of the styled call and timed out");
577
- const O = S + D, c = f.slice(S, O), w = f, h = ` ${m} = styled(${d}, "${y.classNames}", ${JSON.stringify(y.clientProps)});`;
578
- f = f.replace(c, h), w === f && console.error("Minimize file failed to change content", { name: m, tagName: d });
579
- }), p.importStrategy === "component") {
580
- const m = z(e, 6), $ = et(e);
581
- f = `import '../../saltygen/css/${`f_${R($.name)}-${m}.css`}';
582
- ${f}`;
580
+ const O = j + k, l = c.slice(j, O), y = c, g = ` ${p} = styled(${d}, "${m.classNames}", ${JSON.stringify(m.clientProps)});`;
581
+ c = c.replace(l, g), y === c && console.error("Minimize file failed to change content", { name: p, tagName: d });
582
+ }), h.importStrategy === "component") {
583
+ const p = z(e, 6), $ = et(e);
584
+ c = `import '../../saltygen/css/${`f_${R($.name)}-${p}.css`}';
585
+ ${c}`;
583
586
  }
584
- return f = f.replace("{ styled }", "{ styledClient as styled }"), f = f.replace("@salty-css/react/styled", "@salty-css/react/styled-client"), f;
587
+ return c = c.replace("{ styled }", "{ styledClient as styled }"), c = c.replace("@salty-css/react/styled", "@salty-css/react/styled-client"), c;
585
588
  }
586
589
  } catch (n) {
587
590
  console.error("Error in minimizeFile:", n);
588
591
  }
589
- }, yt = async (t) => {
592
+ }, $t = async (t) => {
590
593
  if (!t || t.includes("node_modules") || t.includes("saltygen")) return !1;
591
594
  if (t.includes("salty.config")) return !0;
592
- if (!B(t)) return !1;
595
+ if (!G(t)) return !1;
593
596
  const n = await lt(t, "utf-8");
594
597
  return !!/.+define[A-Z]\w+/.test(n);
595
598
  }, ce = (t) => ({
596
599
  name: "stylegen",
597
600
  buildStart: () => te(t),
598
601
  load: async (e) => {
599
- if (B(e))
602
+ if (G(e))
600
603
  return await se(t, e);
601
604
  },
602
605
  handleHotUpdate: async ({ file: e, server: s }) => {
603
- await yt(e) && await s.restart();
606
+ await $t(e) && await s.restart();
604
607
  },
605
608
  watchChange: {
606
609
  handler: async (e) => {
607
- B(e) && (await yt(e) || await ee(t, e));
610
+ G(e) && (await $t(e) || await ee(t, e));
608
611
  }
609
612
  }
610
613
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salty-css/vite",
3
- "version": "0.0.1-alpha.206",
3
+ "version": "0.0.1-alpha.207",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.mjs",
6
6
  "typings": "./dist/index.d.ts",
@@ -34,6 +34,6 @@
34
34
  }
35
35
  },
36
36
  "dependencies": {
37
- "@salty-css/core": "^0.0.1-alpha.206"
37
+ "@salty-css/core": "^0.0.1-alpha.207"
38
38
  }
39
39
  }