@salty-css/vite 0.0.1-alpha.134 → 0.0.1-alpha.135

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