@salty-css/vite 0.0.1-alpha.117 → 0.0.1-alpha.119

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