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

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