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

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