@salty-css/vite 0.0.1-alpha.146 → 0.0.1-alpha.148

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 +15 -15
  2. package/index.js +193 -186
  3. package/package.json +2 -2
package/index.cjs CHANGED
@@ -1,36 +1,36 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const yt=require("esbuild"),gt=require("child_process"),a=require("path"),f=require("fs"),L=require("fs/promises"),J=require("winston");var Z=typeof document<"u"?document.currentScript:null;function ht(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 Y=ht(yt),G=t=>String.fromCharCode(t+(t>25?39:97)),mt=(t,e)=>{let s="",n;for(n=Math.abs(t);n>52;n=n/52|0)s=G(n%52)+s;return s=G(n%52)+s,s.length<e?s=s.padStart(e,"a"):s.length>e&&(s=s.slice(-e)),s},$t=(t,e)=>{let s=e.length;for(;s;)t=t*33^e.charCodeAt(--s);return t},W=(t,e=5)=>{const s=$t(5381,JSON.stringify(t))>>>0;return mt(s,e)};function V(t){return t?typeof t!="string"?V(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 St=(t,e)=>{if(typeof t!="string")return{result:t};if(!e)return{result:t};const s=[];return Object.values(e).forEach(n=>{const{pattern:i,transform:r}=n;t=t.replace(i,u=>{const{value:d,css:c}=r(u);return c&&s.push(c),d})}),{result:t,additionalCss:s}},Q=t=>typeof t!="string"?{result:t}:/\{[^{}]+\}/g.test(t)?{result:t.replace(/\{([^{}]+)\}/g,(...n)=>`var(--${V(n[1].replaceAll(".","-"))})`)}:{result:t},M=(t,e,s)=>{if(!t)return"";const n=[],i=Object.entries(t).reduce((u,[d,c])=>{const o=d.trim();if(typeof c=="function"&&(c=c()),typeof c=="object"){if(!c)return u;if(o==="variants")return Object.entries(c).forEach(([l,m])=>{m&&Object.entries(m).forEach(([N,w])=>{if(!w)return;const T=`${e}.${l}-${N}`,k=M(w,T);n.push(k)})}),u;if(o==="defaultVariants")return u;if(o==="compoundVariants")return c.forEach(l=>{const{css:m,...N}=l,w=Object.entries(N).reduce((k,[y,$])=>`${k}.${y}-${$}`,e),T=M(m,w);n.push(T)}),u;if(o.startsWith("@")){const l=M(c,e),m=`${o} {
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const yt=require("esbuild"),gt=require("child_process"),a=require("path"),f=require("fs"),L=require("fs/promises"),z=require("winston");var H=typeof document<"u"?document.currentScript:null;function ht(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 Q=ht(yt),X=t=>String.fromCharCode(t+(t>25?39:97)),mt=(t,e)=>{let s="",n;for(n=Math.abs(t);n>52;n=n/52|0)s=X(n%52)+s;return s=X(n%52)+s,s.length<e?s=s.padStart(e,"a"):s.length>e&&(s=s.slice(-e)),s},$t=(t,e)=>{let s=e.length;for(;s;)t=t*33^e.charCodeAt(--s);return t},I=(t,e=5)=>{const s=$t(5381,JSON.stringify(t))>>>0;return mt(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 St=(t,e)=>{if(typeof t!="string")return{result:t};if(!e)return{result:t};const s=[];return Object.values(e).forEach(n=>{const{pattern:i,transform:r}=n;t=t.replace(i,u=>{const{value:d,css:c}=r(u);return c&&s.push(c),d})}),{result:t,additionalCss:s}},v=t=>typeof t!="string"?{result:t}:/\{[^{}]+\}/g.test(t)?{result:t.replace(/\{([^{}]+)\}/g,(...n)=>`var(--${R(n[1].replaceAll(".","-"))})`)}:{result:t},V=(t,e,s)=>{if(!t)return"";const n=[],i=Object.entries(t).reduce((u,[d,c])=>{const o=d.trim();if(typeof c=="function"&&(c=c()),typeof c=="object"){if(!c)return u;if(o==="variants")return Object.entries(c).forEach(([l,m])=>{m&&Object.entries(m).forEach(([D,w])=>{if(!w)return;const N=`${e}.${l}-${D}`,k=V(w,N);n.push(k)})}),u;if(o==="defaultVariants")return u;if(o==="compoundVariants")return c.forEach(l=>{const{css:m,...D}=l,w=Object.entries(D).reduce((k,[y,$])=>`${k}.${y}-${$}`,e),N=V(m,w);n.push(N)}),u;if(o.startsWith("@")){const l=V(c,e),m=`${o} {
2
2
  ${l.replace(`
3
3
  `,`
4
4
  `)}
5
- }`;return n.push(m),u}const p=d.includes("&")?o.replace("&",e):o.startsWith(":")?`${e}${o}`:`${e} ${o}`,j=M(c,p);return n.push(j),u}const g=o.startsWith("-")?o:V(o),h=(p,j=";")=>u=`${u}${p}${j}`,C=p=>h(`${g}:${p}`);if(typeof c=="number")return C(c);if(typeof c!="string")if("toString"in c)c=c.toString();else return u;const{modifiers:x}={},O=function*(){yield Q(c),yield St(c,x)}();for(const{result:p,additionalCss:j=[]}of O)c=p,j.forEach(l=>{const m=M(l,"");h(m,"")});return C(c)},"");return i?e?[`${e} { ${i} }`,...n].join(`
5
+ }`;return n.push(m),u}const p=d.includes("&")?o.replace("&",e):o.startsWith(":")?`${e}${o}`:`${e} ${o}`,j=V(c,p);return n.push(j),u}const g=o.startsWith("-")?o:R(o),h=(p,j=";")=>u=`${u}${p}${j}`,C=p=>h(`${g}:${p}`);if(typeof c=="number")return C(c);if(typeof c!="string")if("toString"in c)c=c.toString();else return u;const{modifiers:x}={},_=function*(){yield v(c),yield St(c,x)}();for(const{result:p,additionalCss:j=[]}of _)c=p,j.forEach(l=>{const m=V(l,"");h(m,"")});return C(c)},"");return i?e?[`${e} { ${i} }`,...n].join(`
6
6
  `):i:n.join(`
7
- `)},v=(t,e=[])=>{if(!t)return"";const s=[],n={};if(Object.entries(t).forEach(([i,r])=>{if(typeof r=="object"){if(!r)return;const u=i.trim(),d=v(r,[...e,u]);s.push(d)}else n[i]=r}),Object.keys(n).length){const i=e.map(V).join("-"),r=M(n,`.${i}`);s.push(r)}return s.join(`
8
- `)},jt=t=>Object.entries(t).reduce((e,[s,n])=>(typeof n=="object"&&(e[s]=tt(n).map(i=>`"${i}"`).join(" | ")),e),{}),tt=(t,e="",s=new Set)=>t?(Object.entries(t).forEach(([n,i])=>{const r=e?`${e}.${n}`:n;return typeof i=="object"?tt(i,r,s):s.add(e)}),[...s]):[],et=t=>{if(!t||t==="/")throw new Error("Could not find package.json file");const e=a.join(t,"package.json");return f.existsSync(e)?e:et(a.join(t,".."))},bt=async t=>{const e=et(t);return await L.readFile(e,"utf-8").then(JSON.parse).catch(()=>{})},wt=async t=>{const e=await bt(t);if(e)return e.type};let A;const st=async t=>{if(A)return A;const e=await wt(t);return e==="module"?A="esm":(e==="commonjs"||(typeof document>"u"?require("url").pathToFileURL(__filename).href:Z&&Z.tagName.toUpperCase()==="SCRIPT"&&Z.src||new URL("index.cjs",document.baseURI).href).endsWith(".cjs"))&&(A="cjs"),A||"esm"},H=J.createLogger({level:"debug",format:J.format.combine(J.format.colorize(),J.format.cli()),transports:[new J.transports.Console({})]});function nt(t){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()):""}const Ft={"*, *::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"}},q={externalModules:[]},ot=t=>{if(q.externalModules.length>0)return q.externalModules;const s=f.readFileSync(t,"utf8").match(/externalModules:\s?\[(.*)\]/);if(!s)return[];const n=s[1].split(",").map(i=>i.replace(/['"`]/g,"").trim());return q.externalModules=n,n},I=t=>a.join(t,"./saltygen"),rt=["salty","css","styles","styled"],Ct=(t=[])=>new RegExp(`\\.(${[...rt,...t].join("|")})\\.`),z=(t,e=[])=>Ct(e).test(t),it=async t=>{if(t==="/")throw new Error("Could not find .saltyrc.json file");const e=a.join(t,".saltyrc.json"),s=await L.readFile(e,"utf-8").then(JSON.parse).catch(()=>{});return s||it(a.join(t,".."))},ct=async t=>{var n,i;const e=await it(t),s=(n=e.projects)==null?void 0:n.find(r=>t.endsWith(r.dir||""));return s||((i=e.projects)==null?void 0:i.find(r=>r.dir===e.defaultProject))},xt=async t=>{const e=await ct(t),s=I(t),n=a.join(t,(e==null?void 0:e.configDir)||"","salty.config.ts"),i=a.join(s,"salty.config.js"),r=await st(t),u=ot(n);await Y.build({entryPoints:[n],minify:!0,treeShaking:!0,bundle:!0,outfile:i,format:r,external:u});const d=Date.now(),{config:c}=await import(`${i}?t=${d}`);return c},kt=async t=>{const e=await xt(t),s=new Set,n=(y,$=[])=>y?Object.entries(y).flatMap(([F,S])=>{if(!S)return;if(typeof S=="object")return n(S,[...$,F]);const D=nt(F),R=V(F),_=[...$,D].join(".");s.add(`"${_}"`);const P=[...$.map(V),R].join("-"),{result:E}=Q(S);return`--${P}: ${E};`}):[],i=y=>y?Object.entries(y).flatMap(([$,F])=>{const S=n(F);return $==="base"?S.join(""):`${$} { ${S.join("")} }`}):[],r=y=>y?Object.entries(y).flatMap(([$,F])=>Object.entries(F).flatMap(([S,D])=>{const R=n(D,[$]),_=`.${$}-${S}, [data-${$}="${S}"]`,P=R.join("");return`${_} { ${P} }`})):[],u=n(e.variables),d=i(e.responsiveVariables),c=r(e.conditionalVariables),o=I(t),g=a.join(o,"css/_variables.css"),h=`:root { ${u.join("")} ${d.join("")} } ${c.join("")}`;f.writeFileSync(g,h);const C=a.join(o,"css/_global.css"),x=M(e.global,"");f.writeFileSync(C,`@layer global { ${x} }`);const b=a.join(o,"css/_reset.css"),p=e.reset==="none"?{}:typeof e.reset=="object"?e.reset:Ft,j=M(p,"");f.writeFileSync(b,`@layer reset { ${j} }`);const l=a.join(o,"css/_templates.css"),m=v(e.templates),N=jt(e.templates);f.writeFileSync(l,m);const w=a.join(o,"types/css-tokens.d.ts"),k=`
7
+ `)},tt=(t,e=[])=>{if(!t)return"";const s=[],n={};if(Object.entries(t).forEach(([i,r])=>{if(typeof r=="object"){if(!r)return;const u=i.trim(),d=tt(r,[...e,u]);s.push(d)}else n[i]=r}),Object.keys(n).length){const i=e.map(R).join("-"),r=V(n,`.${i}`);s.push(r)}return s.join(`
8
+ `)},jt=t=>Object.entries(t).reduce((e,[s,n])=>(typeof n=="object"&&(e[s]=et(n).map(i=>`"${i}"`).join(" | ")),e),{}),et=(t,e="",s=new Set)=>t?(Object.entries(t).forEach(([n,i])=>{const r=e?`${e}.${n}`:n;return typeof i=="object"?et(i,r,s):s.add(e)}),[...s]):[],st=t=>{if(!t||t==="/")throw new Error("Could not find package.json file");const e=a.join(t,"package.json");return f.existsSync(e)?e:st(a.join(t,".."))},bt=async t=>{const e=st(t);return await L.readFile(e,"utf-8").then(JSON.parse).catch(()=>{})},wt=async t=>{const e=await bt(t);if(e)return e.type};let J;const nt=async t=>{if(J)return J;const e=await wt(t);return e==="module"?J="esm":(e==="commonjs"||(typeof document>"u"?require("url").pathToFileURL(__filename).href:H&&H.tagName.toUpperCase()==="SCRIPT"&&H.src||new URL("index.cjs",document.baseURI).href).endsWith(".cjs"))&&(J="cjs"),J||"esm"},q=z.createLogger({level:"debug",format:z.format.combine(z.format.colorize(),z.format.cli()),transports:[new z.transports.Console({})]});function ot(t){return t?typeof t!="string"?ot(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 Ft={"*, *::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"}},E={externalModules:[],rcFile:void 0,destDir:void 0},rt=t=>{if(E.externalModules.length>0)return E.externalModules;const s=f.readFileSync(t,"utf8").match(/externalModules:\s?\[(.*)\]/);if(!s)return[];const n=s[1].split(",").map(i=>i.replace(/['"`]/g,"").trim());return E.externalModules=n,n},W=async t=>{if(E.destDir)return E.destDir;const e=await B(t),s=a.join(t,(e==null?void 0:e.saltygenDir)||"saltygen");return E.destDir=s,s},it=["salty","css","styles","styled"],Ct=(t=[])=>new RegExp(`\\.(${[...it,...t].join("|")})\\.`),Z=(t,e=[])=>Ct(e).test(t),ct=async t=>{if(E.rcFile)return E.rcFile;if(t==="/")throw new Error("Could not find .saltyrc.json file");const e=a.join(t,".saltyrc.json"),s=await L.readFile(e,"utf-8").then(JSON.parse).catch(()=>{});return s?(E.rcFile=s,s):ct(a.join(t,".."))},B=async t=>{var n,i;const e=await ct(t),s=(n=e.projects)==null?void 0:n.find(r=>t.endsWith(r.dir||""));return s||((i=e.projects)==null?void 0:i.find(r=>r.dir===e.defaultProject))},xt=async t=>{const e=await B(t),s=await W(t),n=a.join(t,(e==null?void 0:e.configDir)||"","salty.config.ts"),i=a.join(s,"salty.config.js"),r=await nt(t),u=rt(n);await Q.build({entryPoints:[n],minify:!0,treeShaking:!0,bundle:!0,outfile:i,format:r,external:u});const d=Date.now(),{config:c}=await import(`${i}?t=${d}`);return c},kt=async t=>{const e=await xt(t),s=new Set,n=(y,$=[])=>y?Object.entries(y).flatMap(([F,S])=>{if(!S)return;if(typeof S=="object")return n(S,[...$,F]);const M=ot(F),A=R(F),T=[...$,M].join(".");s.add(`"${T}"`);const P=[...$.map(R),A].join("-"),{result:O}=v(S);return`--${P}: ${O};`}):[],i=y=>y?Object.entries(y).flatMap(([$,F])=>{const S=n(F);return $==="base"?S.join(""):`${$} { ${S.join("")} }`}):[],r=y=>y?Object.entries(y).flatMap(([$,F])=>Object.entries(F).flatMap(([S,M])=>{const A=n(M,[$]),T=`.${$}-${S}, [data-${$}="${S}"]`,P=A.join("");return`${T} { ${P} }`})):[],u=n(e.variables),d=i(e.responsiveVariables),c=r(e.conditionalVariables),o=await W(t),g=a.join(o,"css/_variables.css"),h=`:root { ${u.join("")} ${d.join("")} } ${c.join("")}`;f.writeFileSync(g,h);const C=a.join(o,"css/_global.css"),x=V(e.global,"");f.writeFileSync(C,`@layer global { ${x} }`);const b=a.join(o,"css/_reset.css"),p=e.reset==="none"?{}:typeof e.reset=="object"?e.reset:Ft,j=V(p,"");f.writeFileSync(b,`@layer reset { ${j} }`);const l=a.join(o,"css/_templates.css"),m=tt(e.templates),D=jt(e.templates);f.writeFileSync(l,m);const w=a.join(o,"types/css-tokens.d.ts"),k=`
9
9
  // Variable types
10
10
  type VariableTokens = ${[...s].join("|")};
11
11
  type PropertyValueToken = \`{\${VariableTokens}}\`;
12
12
 
13
13
  // Template types
14
14
  type TemplateTokens = {
15
- ${Object.entries(N).map(([y,$])=>`${y}?: ${$}`).join(`
15
+ ${Object.entries(D).map(([y,$])=>`${y}?: ${$}`).join(`
16
16
  `)}
17
17
  }
18
- `;f.writeFileSync(w,k)},X=t=>t.replace(/styled\(([^"'`{,]+),/g,(e,s)=>{if(/^['"`]/.test(s))return e;const i=new RegExp(`import[^;]*${s}[,\\s{][^;]*from\\s?([^{};]+);`);if(!i.test(t))return e;const u=i.exec(t);if(u){const d=u.at(1);if(rt.some(o=>d==null?void 0:d.includes(o)))return e}return"styled('div',"}),B=async(t,e,s)=>{const n=W(e),i=a.join(s,"./temp");f.existsSync(i)||f.mkdirSync(i);const r=a.parse(e);let u=f.readFileSync(e,"utf8");u=X(u);const d=a.join(s,"js",n+".js"),c=await ct(t),o=a.join(t,(c==null?void 0:c.configDir)||"","salty.config.ts"),g=ot(o),h=await st(t);await Y.build({stdin:{contents:u,sourcefile:r.base,resolveDir:r.dir,loader:"tsx"},minify:!1,treeShaking:!0,bundle:!0,outfile:d,format:h,target:["node20"],keepNames:!0,external:g,packages:"external",plugins:[{name:"test",setup:b=>{b.onLoad({filter:/.*\.css|salty|styles|styled\.ts/},O=>{const p=f.readFileSync(O.path,"utf8");return{contents:X(p),loader:"ts"}})}}]});const C=Date.now();return await import(`${d}?t=${C}`)},K=async t=>{const e=I(t),s=a.join(e,"salty.config.js"),n=Date.now(),{config:i}=await import(`${s}?t=${n}`);return i},at=()=>{try{return process.env.NODE_ENV==="production"}catch{return!1}},Pt=async(t,e=at())=>{try{const s=Date.now();e?H.info("Generating CSS in production mode! 🔥"):H.info("Generating CSS in development mode! 🚀");const n=[],i=[],r=I(t),u=a.join(r,"index.css");(()=>{f.existsSync(r)&&gt.execSync("rm -rf "+r),f.mkdirSync(r),f.mkdirSync(a.join(r,"css")),f.mkdirSync(a.join(r,"types"))})(),await kt(t);const c=await K(t);async function o(l,m){const N=["node_modules","saltygen"],w=f.statSync(l);if(w.isDirectory()){const T=f.readdirSync(l);if(N.some(y=>l.includes(y)))return;await Promise.all(T.map(y=>o(a.join(l,y),a.join(m,y))))}else if(w.isFile()&&z(l)){const k=await B(t,l,r),y=[];Object.entries(k).forEach(([_,P])=>{if(P.isKeyframes&&P.css){const U=`a_${P.animationName}.css`,dt=`css/${U}`,pt=a.join(r,dt);n.push(U),f.writeFileSync(pt,P.css);return}if(!P.generator)return;const E=P.generator._withBuildContext({name:_,config:c,prod:e});i[E.priority]||(i[E.priority]=[]),i[E.priority].push(E.cssFileName),y.push(E.cssFileName);const ft=`css/${E.cssFileName}`,ut=a.join(r,ft);f.writeFileSync(ut,E.css)});const $=y.map(_=>`@import url('./${_}');`).join(`
19
- `),F=W(l,6),S=a.parse(l),D=V(S.name),R=a.join(r,`css/f_${D}-${F}.css`);f.writeFileSync(R,$)}}await o(t,r);const g=n.map(l=>`@import url('./css/${l}');`).join(`
18
+ `;f.writeFileSync(w,k)},Y=t=>t.replace(/styled\(([^"'`{,]+),/g,(e,s)=>{if(/^['"`]/.test(s))return e;const i=new RegExp(`import[^;]*${s}[,\\s{][^;]*from\\s?([^{};]+);`);if(!i.test(t))return e;const u=i.exec(t);if(u){const d=u.at(1);if(it.some(o=>d==null?void 0:d.includes(o)))return e}return"styled('div',"}),K=async(t,e,s)=>{const n=I(e),i=a.join(s,"./temp");f.existsSync(i)||f.mkdirSync(i);const r=a.parse(e);let u=f.readFileSync(e,"utf8");u=Y(u);const d=a.join(s,"js",n+".js"),c=await B(t),o=a.join(t,(c==null?void 0:c.configDir)||"","salty.config.ts"),g=rt(o),h=await nt(t);await Q.build({stdin:{contents:u,sourcefile:r.base,resolveDir:r.dir,loader:"tsx"},minify:!1,treeShaking:!0,bundle:!0,outfile:d,format:h,target:["node20"],keepNames:!0,external:g,packages:"external",plugins:[{name:"test",setup:b=>{b.onLoad({filter:/.*\.css|salty|styles|styled\.ts/},_=>{const p=f.readFileSync(_.path,"utf8");return{contents:Y(p),loader:"ts"}})}}]});const C=Date.now();return await import(`${d}?t=${C}`)},U=async t=>{const e=await W(t),s=a.join(e,"salty.config.js"),n=Date.now(),{config:i}=await import(`${s}?t=${n}`);return i},at=()=>{try{return process.env.NODE_ENV==="production"}catch{return!1}},Pt=async(t,e=at())=>{try{const s=Date.now();e?q.info("Generating CSS in production mode! 🔥"):q.info("Generating CSS in development mode! 🚀");const n=[],i=[],r=await W(t),u=a.join(r,"index.css");(()=>{f.existsSync(r)&&gt.execSync("rm -rf "+r),f.mkdirSync(r,{recursive:!0}),f.mkdirSync(a.join(r,"css")),f.mkdirSync(a.join(r,"types"))})(),await kt(t);const c=await U(t);async function o(l,m){const D=["node_modules","saltygen"],w=f.statSync(l);if(w.isDirectory()){const N=f.readdirSync(l);if(D.some(y=>l.includes(y)))return;await Promise.all(N.map(y=>o(a.join(l,y),a.join(m,y))))}else if(w.isFile()&&Z(l)){const k=await K(t,l,r),y=[];Object.entries(k).forEach(([T,P])=>{if(P.isKeyframes&&P.css){const G=`a_${P.animationName}.css`,dt=`css/${G}`,pt=a.join(r,dt);n.push(G),f.writeFileSync(pt,P.css);return}if(!P.generator)return;const O=P.generator._withBuildContext({name:T,config:c,prod:e});i[O.priority]||(i[O.priority]=[]),i[O.priority].push(O.cssFileName),y.push(O.cssFileName);const ft=`css/${O.cssFileName}`,ut=a.join(r,ft);f.writeFileSync(ut,O.css)});const $=y.map(T=>`@import url('./${T}');`).join(`
19
+ `),F=I(l,6),S=a.parse(l),M=R(S.name),A=a.join(r,`css/f_${M}-${F}.css`);f.writeFileSync(A,$)}}await o(t,r);const g=n.map(l=>`@import url('./css/${l}');`).join(`
20
20
  `);let b=`@layer reset, global, l0, l1, l2, l3, l4, l5, l6, l7, l8;
21
21
 
22
22
  ${["_variables.css","_reset.css","_global.css","_templates.css"].filter(l=>{try{return f.readFileSync(a.join(r,"css",l),"utf8").length>0}catch{return!1}}).map(l=>`@import url('./css/${l}');`).join(`
23
23
  `)}
24
- ${g}`;if(c.importStrategy!=="component"){const l=i.reduce((m,N,w)=>{const T=N.reduce((F,S)=>{var P;const D=a.join(r,"css",S),R=f.readFileSync(D,"utf8"),_=((P=/.*-([^-]+)-\d+.css/.exec(S))==null?void 0:P.at(1))||W(D,6);return F.includes(_)?F:`${F}
25
- /*start:${_}*/
26
- ${R}
27
- /*end:${_}*/
28
- `},""),k=`l_${w}.css`,y=a.join(r,"css",k),$=`@layer l${w} { ${T}
24
+ ${g}`;if(c.importStrategy!=="component"){const l=i.reduce((m,D,w)=>{const N=D.reduce((F,S)=>{var P;const M=a.join(r,"css",S),A=f.readFileSync(M,"utf8"),T=((P=/.*-([^-]+)-\d+.css/.exec(S))==null?void 0:P.at(1))||I(M,6);return F.includes(T)?F:`${F}
25
+ /*start:${T}*/
26
+ ${A}
27
+ /*end:${T}*/
28
+ `},""),k=`l_${w}.css`,y=a.join(r,"css",k),$=`@layer l${w} { ${N}
29
29
  }`;return f.writeFileSync(y,$),`${m}
30
- @import url('./css/${k}');`},"");b+=l}f.writeFileSync(u,b);const p=Date.now()-s,j=p<200?"🔥":p<500?"🚀":p<1e3?"🎉":p<2e3?"🚗":p<5e3?"🤔":"🥴";H.info(`Generated CSS in ${p}ms! ${j}`)}catch(s){console.error(s)}},Nt=async(t,e)=>{try{const s=a.join(t,"./saltygen");if(z(e)){const i=[],r=await K(t),u=await B(t,e,s);Object.entries(u).forEach(([d,c])=>{if(c.isKeyframes&&c.css){const x=`css/${`a_${c.animationName}.css`}`,b=a.join(s,x);f.writeFileSync(b,c.css);return}if(!c.generator)return;const o=c.generator._withBuildContext({name:d,config:r}),g=`css/${o.cssFileName}`,h=a.join(s,g);f.writeFileSync(h,o.css),i[o.priority]||(i[o.priority]=[]),i[o.priority].push(o.cssFileName)}),r.importStrategy!=="component"&&i.forEach((d,c)=>{const o=`l_${c}.css`,g=a.join(s,"css",o);let h=f.readFileSync(g,"utf8");d.forEach(C=>{var p;const x=a.join(s,"css",C),b=((p=/.*-([^-]+)-\d+.css/.exec(C))==null?void 0:p.at(1))||W(x,6);if(!h.includes(b)){const j=f.readFileSync(x,"utf8"),l=`/*start:${b}*/
30
+ @import url('./css/${k}');`},"");b+=l}f.writeFileSync(u,b);const p=Date.now()-s,j=p<200?"🔥":p<500?"🚀":p<1e3?"🎉":p<2e3?"🚗":p<5e3?"🤔":"🥴";q.info(`Generated CSS in ${p}ms! ${j}`)}catch(s){console.error(s)}},Dt=async(t,e)=>{try{const s=await W(t);if(Z(e)){const i=[],r=await U(t),u=await K(t,e,s);Object.entries(u).forEach(([d,c])=>{if(c.isKeyframes&&c.css){const x=`css/${`a_${c.animationName}.css`}`,b=a.join(s,x);f.writeFileSync(b,c.css);return}if(!c.generator)return;const o=c.generator._withBuildContext({name:d,config:r}),g=`css/${o.cssFileName}`,h=a.join(s,g);f.writeFileSync(h,o.css),i[o.priority]||(i[o.priority]=[]),i[o.priority].push(o.cssFileName)}),r.importStrategy!=="component"&&i.forEach((d,c)=>{const o=`l_${c}.css`,g=a.join(s,"css",o);let h=f.readFileSync(g,"utf8");d.forEach(C=>{var p;const x=a.join(s,"css",C),b=((p=/.*-([^-]+)-\d+.css/.exec(C))==null?void 0:p.at(1))||I(x,6);if(!h.includes(b)){const j=f.readFileSync(x,"utf8"),l=`/*start:${b}*/
31
31
  ${j}
32
32
  /*end:${b}*/
33
33
  `;h=`${h.replace(/\}$/,"")}
34
34
  ${l}
35
- }`}}),f.writeFileSync(g,h)})}}catch(s){console.error(s)}},Tt=async(t,e,s=at())=>{try{const n=a.join(t,"./saltygen");if(z(e)){const r=f.readFileSync(e,"utf8");r.replace(/^(?!export\s)const\s.*/gm,g=>`export ${g}`)!==r&&await L.writeFile(e,r);const d=await K(t),c=await B(t,e,n);let o=r;if(Object.entries(c).forEach(([g,h])=>{var F;if(h.isKeyframes||!h.generator)return;const C=h.generator._withBuildContext({name:g,config:d,prod:s}),x=new RegExp(`\\s${g}[=\\s]+[^()]+styled\\(([^,]+),`,"g").exec(r);if(!x)return console.error("Could not find the original declaration");const b=(F=x.at(1))==null?void 0:F.trim(),O=new RegExp(`\\s${g}[=\\s]+styled\\(`,"g").exec(o);if(!O)return console.error("Could not find the original declaration");const{index:p}=O;let j=!1;const l=setTimeout(()=>j=!0,5e3);let m=0,N=!1,w=0;for(;!N&&!j;){const S=o[p+m];S==="("&&w++,S===")"&&w--,w===0&&S===")"&&(N=!0),m>o.length&&(j=!0),m++}if(!j)clearTimeout(l);else throw new Error("Failed to find the end of the styled call and timed out");const T=p+m,k=o.slice(p,T),y=o,$=` ${g} = styled(${b}, "${C.classNames}", ${JSON.stringify(C.props)});`;o=o.replace(k,$),y===o&&console.error("Minimize file failed to change content",{name:g,tagName:b})}),d.importStrategy==="component"){const g=W(e,6),h=a.parse(e);o=`import '../../saltygen/css/${`f_${V(h.name)}-${g}.css`}';
36
- ${o}`}return o=o.replace("{ styled }","{ styledClient as styled }"),o=o.replace("@salty-css/react/styled","@salty-css/react/styled-client"),o}}catch(n){console.error("Error in minimizeFile:",n)}},lt=t=>({name:"stylegen",buildStart:()=>Pt(t),load:async e=>{if(z(e))return await Tt(t,e)},handleHotUpdate:async({file:e,server:s})=>{e.includes("salty.config")&&await s.restart()},watchChange:{handler:async e=>{z(e)&&await Nt(t,e)}}});exports.default=lt;exports.saltyPlugin=lt;
35
+ }`}}),f.writeFileSync(g,h)})}}catch(s){console.error(s)}},Nt=async(t,e,s=at())=>{try{const n=await W(t);if(Z(e)){const r=f.readFileSync(e,"utf8");r.replace(/^(?!export\s)const\s.*/gm,g=>`export ${g}`)!==r&&await L.writeFile(e,r);const d=await U(t),c=await K(t,e,n);let o=r;if(Object.entries(c).forEach(([g,h])=>{var F;if(h.isKeyframes||!h.generator)return;const C=h.generator._withBuildContext({name:g,config:d,prod:s}),x=new RegExp(`\\s${g}[=\\s]+[^()]+styled\\(([^,]+),`,"g").exec(r);if(!x)return console.error("Could not find the original declaration");const b=(F=x.at(1))==null?void 0:F.trim(),_=new RegExp(`\\s${g}[=\\s]+styled\\(`,"g").exec(o);if(!_)return console.error("Could not find the original declaration");const{index:p}=_;let j=!1;const l=setTimeout(()=>j=!0,5e3);let m=0,D=!1,w=0;for(;!D&&!j;){const S=o[p+m];S==="("&&w++,S===")"&&w--,w===0&&S===")"&&(D=!0),m>o.length&&(j=!0),m++}if(!j)clearTimeout(l);else throw new Error("Failed to find the end of the styled call and timed out");const N=p+m,k=o.slice(p,N),y=o,$=` ${g} = styled(${b}, "${C.classNames}", ${JSON.stringify(C.props)});`;o=o.replace(k,$),y===o&&console.error("Minimize file failed to change content",{name:g,tagName:b})}),d.importStrategy==="component"){const g=I(e,6),h=a.parse(e);o=`import '../../saltygen/css/${`f_${R(h.name)}-${g}.css`}';
36
+ ${o}`}return o=o.replace("{ styled }","{ styledClient as styled }"),o=o.replace("@salty-css/react/styled","@salty-css/react/styled-client"),o}}catch(n){console.error("Error in minimizeFile:",n)}},lt=t=>({name:"stylegen",buildStart:()=>Pt(t),load:async e=>{if(Z(e))return await Nt(t,e)},handleHotUpdate:async({file:e,server:s})=>{e.includes("salty.config")&&await s.restart()},watchChange:{handler:async e=>{Z(e)&&await Dt(t,e)}}});exports.default=lt;exports.saltyPlugin=lt;
package/index.js CHANGED
@@ -1,46 +1,46 @@
1
- import * as v from "esbuild";
1
+ import * as tt from "esbuild";
2
2
  import { execSync as ht } from "child_process";
3
3
  import { join as a, parse as K } from "path";
4
- import { existsSync as G, mkdirSync as Z, statSync as mt, readdirSync as $t, writeFileSync as N, readFileSync as M } from "fs";
5
- import { readFile as tt, writeFile as bt } from "fs/promises";
6
- import { createLogger as St, format as I, transports as wt } from "winston";
7
- const Y = (t) => String.fromCharCode(t + (t > 25 ? 39 : 97)), jt = (t, e) => {
4
+ import { existsSync as G, mkdirSync as I, statSync as mt, readdirSync as $t, writeFileSync as D, readFileSync as R } from "fs";
5
+ import { readFile as et, writeFile as bt } from "fs/promises";
6
+ import { createLogger as wt, format as L, transports as St } from "winston";
7
+ const Q = (t) => String.fromCharCode(t + (t > 25 ? 39 : 97)), jt = (t, e) => {
8
8
  let s = "", n;
9
- for (n = Math.abs(t); n > 52; n = n / 52 | 0) s = Y(n % 52) + s;
10
- return s = Y(n % 52) + s, s.length < e ? s = s.padStart(e, "a") : s.length > e && (s = s.slice(-e)), s;
11
- }, Ct = (t, e) => {
9
+ for (n = Math.abs(t); n > 52; n = n / 52 | 0) s = Q(n % 52) + s;
10
+ return s = Q(n % 52) + s, s.length < e ? s = s.padStart(e, "a") : s.length > e && (s = s.slice(-e)), s;
11
+ }, Ft = (t, e) => {
12
12
  let s = e.length;
13
13
  for (; s; ) t = t * 33 ^ e.charCodeAt(--s);
14
14
  return t;
15
- }, W = (t, e = 5) => {
16
- const s = Ct(5381, JSON.stringify(t)) >>> 0;
15
+ }, Z = (t, e = 5) => {
16
+ const s = Ft(5381, JSON.stringify(t)) >>> 0;
17
17
  return jt(s, e);
18
18
  };
19
- function R(t) {
20
- 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()) : "";
19
+ function A(t) {
20
+ return t ? typeof t != "string" ? A(String(t)) : t.replace(/[\s.]/g, "-").replace(/[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g, (e, s) => (s > 0 ? "-" : "") + e.toLowerCase()) : "";
21
21
  }
22
- const Ft = (t, e) => {
22
+ const Ct = (t, e) => {
23
23
  if (typeof t != "string") return { result: t };
24
24
  if (!e) return { result: t };
25
25
  const s = [];
26
26
  return Object.values(e).forEach((n) => {
27
27
  const { pattern: i, transform: r } = n;
28
28
  t = t.replace(i, (f) => {
29
- const { value: p, css: c } = r(f);
30
- return c && s.push(c), p;
29
+ const { value: u, css: c } = r(f);
30
+ return c && s.push(c), u;
31
31
  });
32
32
  }), { result: t, additionalCss: s };
33
- }, et = (t) => typeof t != "string" ? { result: t } : /\{[^{}]+\}/g.test(t) ? { result: t.replace(/\{([^{}]+)\}/g, (...n) => `var(--${R(n[1].replaceAll(".", "-"))})`) } : { result: t }, _ = (t, e, s) => {
33
+ }, st = (t) => typeof t != "string" ? { result: t } : /\{[^{}]+\}/g.test(t) ? { result: t.replace(/\{([^{}]+)\}/g, (...n) => `var(--${A(n[1].replaceAll(".", "-"))})`) } : { result: t }, M = (t, e, s) => {
34
34
  if (!t) return "";
35
- const n = [], i = Object.entries(t).reduce((f, [p, c]) => {
36
- const o = p.trim();
35
+ const n = [], i = Object.entries(t).reduce((f, [u, c]) => {
36
+ const o = u.trim();
37
37
  if (typeof c == "function" && (c = c()), typeof c == "object") {
38
38
  if (!c) return f;
39
39
  if (o === "variants")
40
40
  return Object.entries(c).forEach(([l, h]) => {
41
- h && Object.entries(h).forEach(([P, w]) => {
42
- if (!w) return;
43
- const E = `${e}.${l}-${P}`, x = _(w, E);
41
+ h && Object.entries(h).forEach(([N, S]) => {
42
+ if (!S) return;
43
+ const P = `${e}.${l}-${N}`, x = M(S, P);
44
44
  n.push(x);
45
45
  });
46
46
  }), f;
@@ -48,84 +48,84 @@ const Ft = (t, e) => {
48
48
  return f;
49
49
  if (o === "compoundVariants")
50
50
  return c.forEach((l) => {
51
- const { css: h, ...P } = l, w = Object.entries(P).reduce((x, [d, m]) => `${x}.${d}-${m}`, e), E = _(h, w);
52
- n.push(E);
51
+ const { css: h, ...N } = l, S = Object.entries(N).reduce((x, [d, m]) => `${x}.${d}-${m}`, e), P = M(h, S);
52
+ n.push(P);
53
53
  }), f;
54
54
  if (o.startsWith("@")) {
55
- const l = _(c, e), h = `${o} {
55
+ const l = M(c, e), h = `${o} {
56
56
  ${l.replace(`
57
57
  `, `
58
58
  `)}
59
59
  }`;
60
60
  return n.push(h), f;
61
61
  }
62
- const u = p.includes("&") ? o.replace("&", e) : o.startsWith(":") ? `${e}${o}` : `${e} ${o}`, b = _(c, u);
62
+ const p = u.includes("&") ? o.replace("&", e) : o.startsWith(":") ? `${e}${o}` : `${e} ${o}`, b = M(c, p);
63
63
  return n.push(b), f;
64
64
  }
65
- const g = o.startsWith("-") ? o : R(o), y = (u, b = ";") => f = `${f}${u}${b}`, C = (u) => y(`${g}:${u}`);
66
- if (typeof c == "number") return C(c);
65
+ const g = o.startsWith("-") ? o : A(o), y = (p, b = ";") => f = `${f}${p}${b}`, F = (p) => y(`${g}:${p}`);
66
+ if (typeof c == "number") return F(c);
67
67
  if (typeof c != "string")
68
68
  if ("toString" in c) c = c.toString();
69
69
  else return f;
70
- const { modifiers: F } = {}, D = function* () {
71
- yield et(c), yield Ft(c, F);
70
+ const { modifiers: C } = {}, T = function* () {
71
+ yield st(c), yield Ct(c, C);
72
72
  }();
73
- for (const { result: u, additionalCss: b = [] } of D)
74
- c = u, b.forEach((l) => {
75
- const h = _(l, "");
73
+ for (const { result: p, additionalCss: b = [] } of T)
74
+ c = p, b.forEach((l) => {
75
+ const h = M(l, "");
76
76
  y(h, "");
77
77
  });
78
- return C(c);
78
+ return F(c);
79
79
  }, "");
80
80
  return i ? e ? [`${e} { ${i} }`, ...n].join(`
81
81
  `) : i : n.join(`
82
82
  `);
83
- }, st = (t, e = []) => {
83
+ }, nt = (t, e = []) => {
84
84
  if (!t) return "";
85
85
  const s = [], n = {};
86
86
  if (Object.entries(t).forEach(([i, r]) => {
87
87
  if (typeof r == "object") {
88
88
  if (!r) return;
89
- const f = i.trim(), p = st(r, [...e, f]);
90
- s.push(p);
89
+ const f = i.trim(), u = nt(r, [...e, f]);
90
+ s.push(u);
91
91
  } else
92
92
  n[i] = r;
93
93
  }), Object.keys(n).length) {
94
- const i = e.map(R).join("-"), r = _(n, `.${i}`);
94
+ const i = e.map(A).join("-"), r = M(n, `.${i}`);
95
95
  s.push(r);
96
96
  }
97
97
  return s.join(`
98
98
  `);
99
- }, xt = (t) => Object.entries(t).reduce((e, [s, n]) => (typeof n == "object" && (e[s] = nt(n).map((i) => `"${i}"`).join(" | ")), e), {}), nt = (t, e = "", s = /* @__PURE__ */ new Set()) => t ? (Object.entries(t).forEach(([n, i]) => {
99
+ }, xt = (t) => Object.entries(t).reduce((e, [s, n]) => (typeof n == "object" && (e[s] = ot(n).map((i) => `"${i}"`).join(" | ")), e), {}), ot = (t, e = "", s = /* @__PURE__ */ new Set()) => t ? (Object.entries(t).forEach(([n, i]) => {
100
100
  const r = e ? `${e}.${n}` : n;
101
- return typeof i == "object" ? nt(i, r, s) : s.add(e);
102
- }), [...s]) : [], ot = (t) => {
101
+ return typeof i == "object" ? ot(i, r, s) : s.add(e);
102
+ }), [...s]) : [], rt = (t) => {
103
103
  if (!t || t === "/") throw new Error("Could not find package.json file");
104
104
  const e = a(t, "package.json");
105
- return G(e) ? e : ot(a(t, ".."));
105
+ return G(e) ? e : rt(a(t, ".."));
106
106
  }, kt = async (t) => {
107
- const e = ot(t);
108
- return await tt(e, "utf-8").then(JSON.parse).catch(() => {
107
+ const e = rt(t);
108
+ return await et(e, "utf-8").then(JSON.parse).catch(() => {
109
109
  });
110
- }, Nt = async (t) => {
110
+ }, Dt = async (t) => {
111
111
  const e = await kt(t);
112
112
  if (e)
113
113
  return e.type;
114
114
  };
115
- let J;
116
- const rt = async (t) => {
117
- if (J) return J;
118
- const e = await Nt(t);
119
- return e === "module" ? J = "esm" : (e === "commonjs" || import.meta.url.endsWith(".cjs")) && (J = "cjs"), J || "esm";
120
- }, L = St({
115
+ let W;
116
+ const it = async (t) => {
117
+ if (W) return W;
118
+ const e = await Dt(t);
119
+ return e === "module" ? W = "esm" : (e === "commonjs" || import.meta.url.endsWith(".cjs")) && (W = "cjs"), W || "esm";
120
+ }, B = wt({
121
121
  level: "debug",
122
- format: I.combine(I.colorize(), I.cli()),
123
- transports: [new wt.Console({})]
122
+ format: L.combine(L.colorize(), L.cli()),
123
+ transports: [new St.Console({})]
124
124
  });
125
- function it(t) {
126
- return t ? typeof t != "string" ? it(String(t)) : t.replace(/[\s-]/g, ".").replace(/[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g, (e, s) => (s > 0 ? "." : "") + e.toLowerCase()) : "";
125
+ function ct(t) {
126
+ return t ? typeof t != "string" ? ct(String(t)) : t.replace(/[\s-]/g, ".").replace(/[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g, (e, s) => (s > 0 ? "." : "") + e.toLowerCase()) : "";
127
127
  }
128
- const Pt = {
128
+ const Nt = {
129
129
  /** Set box model to border-box */
130
130
  "*, *::before, *::after": {
131
131
  boxSizing: "border-box"
@@ -171,26 +171,33 @@ const Pt = {
171
171
  fontSize: "100%",
172
172
  lineHeight: "1.15em"
173
173
  }
174
- }, B = {
175
- externalModules: []
176
- }, ct = (t) => {
177
- if (B.externalModules.length > 0) return B.externalModules;
178
- const s = M(t, "utf8").match(/externalModules:\s?\[(.*)\]/);
174
+ }, V = {
175
+ externalModules: [],
176
+ rcFile: void 0,
177
+ destDir: void 0
178
+ }, at = (t) => {
179
+ if (V.externalModules.length > 0) return V.externalModules;
180
+ const s = R(t, "utf8").match(/externalModules:\s?\[(.*)\]/);
179
181
  if (!s) return [];
180
182
  const n = s[1].split(",").map((i) => i.replace(/['"`]/g, "").trim());
181
- return B.externalModules = n, n;
182
- }, H = (t) => a(t, "./saltygen"), at = ["salty", "css", "styles", "styled"], Et = (t = []) => new RegExp(`\\.(${[...at, ...t].join("|")})\\.`), z = (t, e = []) => Et(e).test(t), lt = async (t) => {
183
+ return V.externalModules = n, n;
184
+ }, z = async (t) => {
185
+ if (V.destDir) return V.destDir;
186
+ const e = await q(t), s = a(t, (e == null ? void 0 : e.saltygenDir) || "saltygen");
187
+ return V.destDir = s, s;
188
+ }, lt = ["salty", "css", "styles", "styled"], Pt = (t = []) => new RegExp(`\\.(${[...lt, ...t].join("|")})\\.`), H = (t, e = []) => Pt(e).test(t), ft = async (t) => {
189
+ if (V.rcFile) return V.rcFile;
183
190
  if (t === "/") throw new Error("Could not find .saltyrc.json file");
184
- const e = a(t, ".saltyrc.json"), s = await tt(e, "utf-8").then(JSON.parse).catch(() => {
191
+ const e = a(t, ".saltyrc.json"), s = await et(e, "utf-8").then(JSON.parse).catch(() => {
185
192
  });
186
- return s || lt(a(t, ".."));
187
- }, ft = async (t) => {
193
+ return s ? (V.rcFile = s, s) : ft(a(t, ".."));
194
+ }, q = async (t) => {
188
195
  var n, i;
189
- const e = await lt(t), s = (n = e.projects) == null ? void 0 : n.find((r) => t.endsWith(r.dir || ""));
196
+ const e = await ft(t), s = (n = e.projects) == null ? void 0 : n.find((r) => t.endsWith(r.dir || ""));
190
197
  return s || ((i = e.projects) == null ? void 0 : i.find((r) => r.dir === e.defaultProject));
191
- }, Tt = async (t) => {
192
- const e = await ft(t), s = H(t), n = a(t, (e == null ? void 0 : e.configDir) || "", "salty.config.ts"), i = a(s, "salty.config.js"), r = await rt(t), f = ct(n);
193
- await v.build({
198
+ }, Et = async (t) => {
199
+ const e = await q(t), s = await z(t), n = a(t, (e == null ? void 0 : e.configDir) || "", "salty.config.ts"), i = a(s, "salty.config.js"), r = await it(t), f = at(n);
200
+ await tt.build({
194
201
  entryPoints: [n],
195
202
  minify: !0,
196
203
  treeShaking: !0,
@@ -199,60 +206,60 @@ const Pt = {
199
206
  format: r,
200
207
  external: f
201
208
  });
202
- const p = Date.now(), { config: c } = await import(`${i}?t=${p}`);
209
+ const u = Date.now(), { config: c } = await import(`${i}?t=${u}`);
203
210
  return c;
204
- }, Dt = async (t) => {
205
- const e = await Tt(t), s = /* @__PURE__ */ new Set(), n = (d, m = []) => d ? Object.entries(d).flatMap(([j, $]) => {
211
+ }, Tt = async (t) => {
212
+ const e = await Et(t), s = /* @__PURE__ */ new Set(), n = (d, m = []) => d ? Object.entries(d).flatMap(([j, $]) => {
206
213
  if (!$) return;
207
214
  if (typeof $ == "object") return n($, [...m, j]);
208
- const V = it(j), A = R(j), T = [...m, V].join(".");
209
- s.add(`"${T}"`);
210
- const k = [...m.map(R), A].join("-"), { result: O } = et($);
215
+ const _ = ct(j), J = A(j), E = [...m, _].join(".");
216
+ s.add(`"${E}"`);
217
+ const k = [...m.map(A), J].join("-"), { result: O } = st($);
211
218
  return `--${k}: ${O};`;
212
219
  }) : [], i = (d) => d ? Object.entries(d).flatMap(([m, j]) => {
213
220
  const $ = n(j);
214
221
  return m === "base" ? $.join("") : `${m} { ${$.join("")} }`;
215
- }) : [], r = (d) => d ? Object.entries(d).flatMap(([m, j]) => Object.entries(j).flatMap(([$, V]) => {
216
- const A = n(V, [m]), T = `.${m}-${$}, [data-${m}="${$}"]`, k = A.join("");
217
- return `${T} { ${k} }`;
218
- })) : [], f = n(e.variables), p = i(e.responsiveVariables), c = r(e.conditionalVariables), o = H(t), g = a(o, "css/_variables.css"), y = `:root { ${f.join("")} ${p.join("")} } ${c.join("")}`;
219
- N(g, y);
220
- const C = a(o, "css/_global.css"), F = _(e.global, "");
221
- N(C, `@layer global { ${F} }`);
222
- const S = a(o, "css/_reset.css"), u = e.reset === "none" ? {} : typeof e.reset == "object" ? e.reset : Pt, b = _(u, "");
223
- N(S, `@layer reset { ${b} }`);
224
- const l = a(o, "css/_templates.css"), h = st(e.templates), P = xt(e.templates);
225
- N(l, h);
226
- const w = a(o, "types/css-tokens.d.ts"), x = `
222
+ }) : [], r = (d) => d ? Object.entries(d).flatMap(([m, j]) => Object.entries(j).flatMap(([$, _]) => {
223
+ const J = n(_, [m]), E = `.${m}-${$}, [data-${m}="${$}"]`, k = J.join("");
224
+ return `${E} { ${k} }`;
225
+ })) : [], f = n(e.variables), u = i(e.responsiveVariables), c = r(e.conditionalVariables), o = await z(t), g = a(o, "css/_variables.css"), y = `:root { ${f.join("")} ${u.join("")} } ${c.join("")}`;
226
+ D(g, y);
227
+ const F = a(o, "css/_global.css"), C = M(e.global, "");
228
+ D(F, `@layer global { ${C} }`);
229
+ const w = a(o, "css/_reset.css"), p = e.reset === "none" ? {} : typeof e.reset == "object" ? e.reset : Nt, b = M(p, "");
230
+ D(w, `@layer reset { ${b} }`);
231
+ const l = a(o, "css/_templates.css"), h = nt(e.templates), N = xt(e.templates);
232
+ D(l, h);
233
+ const S = a(o, "types/css-tokens.d.ts"), x = `
227
234
  // Variable types
228
235
  type VariableTokens = ${[...s].join("|")};
229
236
  type PropertyValueToken = \`{\${VariableTokens}}\`;
230
237
 
231
238
  // Template types
232
239
  type TemplateTokens = {
233
- ${Object.entries(P).map(([d, m]) => `${d}?: ${m}`).join(`
240
+ ${Object.entries(N).map(([d, m]) => `${d}?: ${m}`).join(`
234
241
  `)}
235
242
  }
236
243
  `;
237
- N(w, x);
238
- }, Q = (t) => t.replace(/styled\(([^"'`{,]+),/g, (e, s) => {
244
+ D(S, x);
245
+ }, v = (t) => t.replace(/styled\(([^"'`{,]+),/g, (e, s) => {
239
246
  if (/^['"`]/.test(s)) return e;
240
247
  const i = new RegExp(`import[^;]*${s}[,\\s{][^;]*from\\s?([^{};]+);`);
241
248
  if (!i.test(t)) return e;
242
249
  const f = i.exec(t);
243
250
  if (f) {
244
- const p = f.at(1);
245
- if (at.some((o) => p == null ? void 0 : p.includes(o))) return e;
251
+ const u = f.at(1);
252
+ if (lt.some((o) => u == null ? void 0 : u.includes(o))) return e;
246
253
  }
247
254
  return "styled('div',";
248
- }), q = async (t, e, s) => {
249
- const n = W(e), i = a(s, "./temp");
250
- G(i) || Z(i);
255
+ }), U = async (t, e, s) => {
256
+ const n = Z(e), i = a(s, "./temp");
257
+ G(i) || I(i);
251
258
  const r = K(e);
252
- let f = M(e, "utf8");
253
- f = Q(f);
254
- const p = a(s, "js", n + ".js"), c = await ft(t), o = a(t, (c == null ? void 0 : c.configDir) || "", "salty.config.ts"), g = ct(o), y = await rt(t);
255
- await v.build({
259
+ let f = R(e, "utf8");
260
+ f = v(f);
261
+ const u = a(s, "js", n + ".js"), c = await q(t), o = a(t, (c == null ? void 0 : c.configDir) || "", "salty.config.ts"), g = at(o), y = await it(t);
262
+ await tt.build({
256
263
  stdin: {
257
264
  contents: f,
258
265
  sourcefile: r.base,
@@ -262,7 +269,7 @@ const Pt = {
262
269
  minify: !1,
263
270
  treeShaking: !0,
264
271
  bundle: !0,
265
- outfile: p,
272
+ outfile: u,
266
273
  format: y,
267
274
  target: ["node20"],
268
275
  keepNames: !0,
@@ -271,72 +278,72 @@ const Pt = {
271
278
  plugins: [
272
279
  {
273
280
  name: "test",
274
- setup: (S) => {
275
- S.onLoad({ filter: /.*\.css|salty|styles|styled\.ts/ }, (D) => {
276
- const u = M(D.path, "utf8");
277
- return { contents: Q(u), loader: "ts" };
281
+ setup: (w) => {
282
+ w.onLoad({ filter: /.*\.css|salty|styles|styled\.ts/ }, (T) => {
283
+ const p = R(T.path, "utf8");
284
+ return { contents: v(p), loader: "ts" };
278
285
  });
279
286
  }
280
287
  }
281
288
  ]
282
289
  });
283
- const C = Date.now();
284
- return await import(`${p}?t=${C}`);
285
- }, U = async (t) => {
286
- const e = H(t), s = a(e, "salty.config.js"), n = Date.now(), { config: i } = await import(`${s}?t=${n}`);
290
+ const F = Date.now();
291
+ return await import(`${u}?t=${F}`);
292
+ }, X = async (t) => {
293
+ const e = await z(t), s = a(e, "salty.config.js"), n = Date.now(), { config: i } = await import(`${s}?t=${n}`);
287
294
  return i;
288
- }, pt = () => {
295
+ }, ut = () => {
289
296
  try {
290
297
  return process.env.NODE_ENV === "production";
291
298
  } catch {
292
299
  return !1;
293
300
  }
294
- }, Ot = async (t, e = pt()) => {
301
+ }, Ot = async (t, e = ut()) => {
295
302
  try {
296
303
  const s = Date.now();
297
- e ? L.info("Generating CSS in production mode! 🔥") : L.info("Generating CSS in development mode! 🚀");
298
- const n = [], i = [], r = H(t), f = a(r, "index.css");
304
+ e ? B.info("Generating CSS in production mode! 🔥") : B.info("Generating CSS in development mode! 🚀");
305
+ const n = [], i = [], r = await z(t), f = a(r, "index.css");
299
306
  (() => {
300
- G(r) && ht("rm -rf " + r), Z(r), Z(a(r, "css")), Z(a(r, "types"));
301
- })(), await Dt(t);
302
- const c = await U(t);
307
+ G(r) && ht("rm -rf " + r), I(r, { recursive: !0 }), I(a(r, "css")), I(a(r, "types"));
308
+ })(), await Tt(t);
309
+ const c = await X(t);
303
310
  async function o(l, h) {
304
- const P = ["node_modules", "saltygen"], w = mt(l);
305
- if (w.isDirectory()) {
306
- const E = $t(l);
307
- if (P.some((d) => l.includes(d))) return;
308
- await Promise.all(E.map((d) => o(a(l, d), a(h, d))));
309
- } else if (w.isFile() && z(l)) {
310
- const x = await q(t, l, r), d = [];
311
- Object.entries(x).forEach(([T, k]) => {
311
+ const N = ["node_modules", "saltygen"], S = mt(l);
312
+ if (S.isDirectory()) {
313
+ const P = $t(l);
314
+ if (N.some((d) => l.includes(d))) return;
315
+ await Promise.all(P.map((d) => o(a(l, d), a(h, d))));
316
+ } else if (S.isFile() && H(l)) {
317
+ const x = await U(t, l, r), d = [];
318
+ Object.entries(x).forEach(([E, k]) => {
312
319
  if (k.isKeyframes && k.css) {
313
- const X = `a_${k.animationName}.css`, gt = `css/${X}`, yt = a(r, gt);
314
- n.push(X), N(yt, k.css);
320
+ const Y = `a_${k.animationName}.css`, gt = `css/${Y}`, yt = a(r, gt);
321
+ n.push(Y), D(yt, k.css);
315
322
  return;
316
323
  }
317
324
  if (!k.generator) return;
318
325
  const O = k.generator._withBuildContext({
319
- name: T,
326
+ name: E,
320
327
  config: c,
321
328
  prod: e
322
329
  });
323
330
  i[O.priority] || (i[O.priority] = []), i[O.priority].push(O.cssFileName), d.push(O.cssFileName);
324
- const ut = `css/${O.cssFileName}`, dt = a(r, ut);
325
- N(dt, O.css);
331
+ const pt = `css/${O.cssFileName}`, dt = a(r, pt);
332
+ D(dt, O.css);
326
333
  });
327
- const m = d.map((T) => `@import url('./${T}');`).join(`
328
- `), j = W(l, 6), $ = K(l), V = R($.name), A = a(r, `css/f_${V}-${j}.css`);
329
- N(A, m);
334
+ const m = d.map((E) => `@import url('./${E}');`).join(`
335
+ `), j = Z(l, 6), $ = K(l), _ = A($.name), J = a(r, `css/f_${_}-${j}.css`);
336
+ D(J, m);
330
337
  }
331
338
  }
332
339
  await o(t, r);
333
340
  const g = n.map((l) => `@import url('./css/${l}');`).join(`
334
341
  `);
335
- let S = `@layer reset, global, l0, l1, l2, l3, l4, l5, l6, l7, l8;
342
+ let w = `@layer reset, global, l0, l1, l2, l3, l4, l5, l6, l7, l8;
336
343
 
337
344
  ${["_variables.css", "_reset.css", "_global.css", "_templates.css"].filter((l) => {
338
345
  try {
339
- return M(a(r, "css", l), "utf8").length > 0;
346
+ return R(a(r, "css", l), "utf8").length > 0;
340
347
  } catch {
341
348
  return !1;
342
349
  }
@@ -344,100 +351,100 @@ ${["_variables.css", "_reset.css", "_global.css", "_templates.css"].filter((l) =
344
351
  `)}
345
352
  ${g}`;
346
353
  if (c.importStrategy !== "component") {
347
- const l = i.reduce((h, P, w) => {
348
- const E = P.reduce((j, $) => {
354
+ const l = i.reduce((h, N, S) => {
355
+ const P = N.reduce((j, $) => {
349
356
  var k;
350
- const V = a(r, "css", $), A = M(V, "utf8"), T = ((k = /.*-([^-]+)-\d+.css/.exec($)) == null ? void 0 : k.at(1)) || W(V, 6);
351
- return j.includes(T) ? j : `${j}
352
- /*start:${T}*/
353
- ${A}
354
- /*end:${T}*/
357
+ const _ = a(r, "css", $), J = R(_, "utf8"), E = ((k = /.*-([^-]+)-\d+.css/.exec($)) == null ? void 0 : k.at(1)) || Z(_, 6);
358
+ return j.includes(E) ? j : `${j}
359
+ /*start:${E}*/
360
+ ${J}
361
+ /*end:${E}*/
355
362
  `;
356
- }, ""), x = `l_${w}.css`, d = a(r, "css", x), m = `@layer l${w} { ${E}
363
+ }, ""), x = `l_${S}.css`, d = a(r, "css", x), m = `@layer l${S} { ${P}
357
364
  }`;
358
- return N(d, m), `${h}
365
+ return D(d, m), `${h}
359
366
  @import url('./css/${x}');`;
360
367
  }, "");
361
- S += l;
368
+ w += l;
362
369
  }
363
- N(f, S);
364
- const u = Date.now() - s, b = u < 200 ? "🔥" : u < 500 ? "🚀" : u < 1e3 ? "🎉" : u < 2e3 ? "🚗" : u < 5e3 ? "🤔" : "🥴";
365
- L.info(`Generated CSS in ${u}ms! ${b}`);
370
+ D(f, w);
371
+ const p = Date.now() - s, b = p < 200 ? "🔥" : p < 500 ? "🚀" : p < 1e3 ? "🎉" : p < 2e3 ? "🚗" : p < 5e3 ? "🤔" : "🥴";
372
+ B.info(`Generated CSS in ${p}ms! ${b}`);
366
373
  } catch (s) {
367
374
  console.error(s);
368
375
  }
369
376
  }, Vt = async (t, e) => {
370
377
  try {
371
- const s = a(t, "./saltygen");
372
- if (z(e)) {
373
- const i = [], r = await U(t), f = await q(t, e, s);
374
- Object.entries(f).forEach(([p, c]) => {
378
+ const s = await z(t);
379
+ if (H(e)) {
380
+ const i = [], r = await X(t), f = await U(t, e, s);
381
+ Object.entries(f).forEach(([u, c]) => {
375
382
  if (c.isKeyframes && c.css) {
376
- const F = `css/${`a_${c.animationName}.css`}`, S = a(s, F);
377
- N(S, c.css);
383
+ const C = `css/${`a_${c.animationName}.css`}`, w = a(s, C);
384
+ D(w, c.css);
378
385
  return;
379
386
  }
380
387
  if (!c.generator) return;
381
388
  const o = c.generator._withBuildContext({
382
- name: p,
389
+ name: u,
383
390
  config: r
384
391
  }), g = `css/${o.cssFileName}`, y = a(s, g);
385
- N(y, o.css), i[o.priority] || (i[o.priority] = []), i[o.priority].push(o.cssFileName);
386
- }), r.importStrategy !== "component" && i.forEach((p, c) => {
392
+ D(y, o.css), i[o.priority] || (i[o.priority] = []), i[o.priority].push(o.cssFileName);
393
+ }), r.importStrategy !== "component" && i.forEach((u, c) => {
387
394
  const o = `l_${c}.css`, g = a(s, "css", o);
388
- let y = M(g, "utf8");
389
- p.forEach((C) => {
390
- var u;
391
- const F = a(s, "css", C), S = ((u = /.*-([^-]+)-\d+.css/.exec(C)) == null ? void 0 : u.at(1)) || W(F, 6);
392
- if (!y.includes(S)) {
393
- const b = M(F, "utf8"), l = `/*start:${S}*/
395
+ let y = R(g, "utf8");
396
+ u.forEach((F) => {
397
+ var p;
398
+ const C = a(s, "css", F), w = ((p = /.*-([^-]+)-\d+.css/.exec(F)) == null ? void 0 : p.at(1)) || Z(C, 6);
399
+ if (!y.includes(w)) {
400
+ const b = R(C, "utf8"), l = `/*start:${w}*/
394
401
  ${b}
395
- /*end:${S}*/
402
+ /*end:${w}*/
396
403
  `;
397
404
  y = `${y.replace(/\}$/, "")}
398
405
  ${l}
399
406
  }`;
400
407
  }
401
- }), N(g, y);
408
+ }), D(g, y);
402
409
  });
403
410
  }
404
411
  } catch (s) {
405
412
  console.error(s);
406
413
  }
407
- }, _t = async (t, e, s = pt()) => {
414
+ }, _t = async (t, e, s = ut()) => {
408
415
  try {
409
- const n = a(t, "./saltygen");
410
- if (z(e)) {
411
- const r = M(e, "utf8");
416
+ const n = await z(t);
417
+ if (H(e)) {
418
+ const r = R(e, "utf8");
412
419
  r.replace(/^(?!export\s)const\s.*/gm, (g) => `export ${g}`) !== r && await bt(e, r);
413
- const p = await U(t), c = await q(t, e, n);
420
+ const u = await X(t), c = await U(t, e, n);
414
421
  let o = r;
415
422
  if (Object.entries(c).forEach(([g, y]) => {
416
423
  var j;
417
424
  if (y.isKeyframes || !y.generator) return;
418
- const C = y.generator._withBuildContext({
425
+ const F = y.generator._withBuildContext({
419
426
  name: g,
420
- config: p,
427
+ config: u,
421
428
  prod: s
422
- }), F = new RegExp(`\\s${g}[=\\s]+[^()]+styled\\(([^,]+),`, "g").exec(r);
423
- if (!F) return console.error("Could not find the original declaration");
424
- const S = (j = F.at(1)) == null ? void 0 : j.trim(), D = new RegExp(`\\s${g}[=\\s]+styled\\(`, "g").exec(o);
425
- if (!D) return console.error("Could not find the original declaration");
426
- const { index: u } = D;
429
+ }), C = new RegExp(`\\s${g}[=\\s]+[^()]+styled\\(([^,]+),`, "g").exec(r);
430
+ if (!C) return console.error("Could not find the original declaration");
431
+ const w = (j = C.at(1)) == null ? void 0 : j.trim(), T = new RegExp(`\\s${g}[=\\s]+styled\\(`, "g").exec(o);
432
+ if (!T) return console.error("Could not find the original declaration");
433
+ const { index: p } = T;
427
434
  let b = !1;
428
435
  const l = setTimeout(() => b = !0, 5e3);
429
- let h = 0, P = !1, w = 0;
430
- for (; !P && !b; ) {
431
- const $ = o[u + h];
432
- $ === "(" && w++, $ === ")" && w--, w === 0 && $ === ")" && (P = !0), h > o.length && (b = !0), h++;
436
+ let h = 0, N = !1, S = 0;
437
+ for (; !N && !b; ) {
438
+ const $ = o[p + h];
439
+ $ === "(" && S++, $ === ")" && S--, S === 0 && $ === ")" && (N = !0), h > o.length && (b = !0), h++;
433
440
  }
434
441
  if (!b) clearTimeout(l);
435
442
  else throw new Error("Failed to find the end of the styled call and timed out");
436
- const E = u + h, x = o.slice(u, E), d = o, m = ` ${g} = styled(${S}, "${C.classNames}", ${JSON.stringify(C.props)});`;
437
- o = o.replace(x, m), d === o && console.error("Minimize file failed to change content", { name: g, tagName: S });
438
- }), p.importStrategy === "component") {
439
- const g = W(e, 6), y = K(e);
440
- o = `import '../../saltygen/css/${`f_${R(y.name)}-${g}.css`}';
443
+ const P = p + h, x = o.slice(p, P), d = o, m = ` ${g} = styled(${w}, "${F.classNames}", ${JSON.stringify(F.props)});`;
444
+ o = o.replace(x, m), d === o && console.error("Minimize file failed to change content", { name: g, tagName: w });
445
+ }), u.importStrategy === "component") {
446
+ const g = Z(e, 6), y = K(e);
447
+ o = `import '../../saltygen/css/${`f_${A(y.name)}-${g}.css`}';
441
448
  ${o}`;
442
449
  }
443
450
  return o = o.replace("{ styled }", "{ styledClient as styled }"), o = o.replace("@salty-css/react/styled", "@salty-css/react/styled-client"), o;
@@ -449,7 +456,7 @@ ${o}`;
449
456
  name: "stylegen",
450
457
  buildStart: () => Ot(t),
451
458
  load: async (e) => {
452
- if (z(e))
459
+ if (H(e))
453
460
  return await _t(t, e);
454
461
  },
455
462
  handleHotUpdate: async ({ file: e, server: s }) => {
@@ -457,7 +464,7 @@ ${o}`;
457
464
  },
458
465
  watchChange: {
459
466
  handler: async (e) => {
460
- z(e) && await Vt(t, e);
467
+ H(e) && await Vt(t, e);
461
468
  }
462
469
  }
463
470
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salty-css/vite",
3
- "version": "0.0.1-alpha.146",
3
+ "version": "0.0.1-alpha.148",
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.146"
37
+ "@salty-css/core": "^0.0.1-alpha.148"
38
38
  }
39
39
  }