@salty-css/vite 0.0.1-alpha.50 → 0.0.1-alpha.52

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 (4) hide show
  1. package/README.md +13 -2
  2. package/index.cjs +13 -13
  3. package/index.js +157 -151
  4. package/package.json +2 -2
package/README.md CHANGED
@@ -22,7 +22,7 @@ In the world of frontend dev is there anything saltier than CSS? Salty CSS is bu
22
22
 
23
23
  #### Initialize Salty CSS for a project
24
24
 
25
- In your existing repository run `npx salty-css init [directory]` which installs required salty-css packages to the current directory and creates project files to the provided directory. Directory can be left blank if you want files to be created to the current directory. Init will also create `.saltyrc` which contains some metadata for future CLI commands.
25
+ In your existing repository run `npx salty-css init [directory]` which installs required salty-css packages to the current directory, detects framework in use (current support for vite and next.js) and creates project files to the provided directory. Directory can be left blank if you want files to be created to the current directory. Init will also create `.saltyrc` which contains some metadata for future CLI commands.
26
26
 
27
27
  #### Create components
28
28
 
@@ -43,11 +43,22 @@ To ease the pain of package updates all Salty CSS packages can be updated with `
43
43
  1. Install related dependencies: `npm i @salty-css/core @salty-css/react`
44
44
  2. Create `salty.config.ts` to your app directory
45
45
 
46
+ #### Next.js
47
+
48
+ 1. First check the instructions for React
49
+ 2. For Next.js support install `npm i -D @salty-css/next`
50
+ 3. Add Salty CSS plugin to next.js config
51
+
52
+ - **Next.js 15:** In `next.config.ts` add import for salty plugin `import { withSaltyCss } from '@salty-css/next';` and then add `withSaltyCss` to wrap your nextConfig export like so `export default withSaltyCss(nextConfig);`
53
+ - **Next.js 14 and older:** In `next.config.js` add import for salty plugin `const { withSaltyCss } = require('@salty-css/next');` and then add `withSaltyCss` to wrap your nextConfig export like so `module.exports = withSaltyCss(nextConfig);`
54
+
55
+ 4. Make sure that `salty.config.ts` and `next.config.ts` are in the same folder!
56
+
46
57
  #### Vite
47
58
 
48
59
  1. First check the instructions for React
49
60
  2. For Vite support install `npm i -D @salty-css/vite`
50
- 3. In `vite.config.ts` add import for salty plugin `import { saltyPlugin } from '@salty-css/vite';` and then add `saltyPlugin(__dirname)` to your vite configuration plugins
61
+ 3. In `vite.config` add import for salty plugin `import { saltyPlugin } from '@salty-css/vite';` and then add `saltyPlugin(__dirname)` to your vite configuration plugins
51
62
  4. Make sure that `salty.config.ts` and `vite.config.ts` are in the same folder!
52
63
 
53
64
  ### Create components
package/index.cjs CHANGED
@@ -1,18 +1,18 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const W=require("esbuild"),J=require("child_process"),y=require("path"),h=require("fs"),K=require("fs/promises");function G(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const s in t)if(s!=="default"){const n=Object.getOwnPropertyDescriptor(t,s);Object.defineProperty(e,s,n.get?n:{enumerable:!0,get:()=>t[s]})}}return e.default=t,Object.freeze(e)}const q=G(W),R=t=>String.fromCharCode(t+(t>25?39:97)),L=(t,e)=>{let s="",n;for(n=Math.abs(t);n>52;n=n/52|0)s=R(n%52)+s;return s=R(n%52)+s,s.length<e?s=s.padStart(e,"a"):s.length>e&&(s=s.slice(-e)),s},U=(t,e)=>{let s=e.length;for(;s;)t=t*33^e.charCodeAt(--s);return t},_=(t,e=3)=>{const s=U(5381,JSON.stringify(t))>>>0;return L(s,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,s)=>(s>0?"-":"")+e.toLowerCase()):""}const X=(t,e)=>{if(typeof t!="string")return{result:t};if(!e)return{result:t};const s=[];return Object.values(e).forEach(n=>{const{pattern:r,transform:g}=n;t=t.replace(r,$=>{const{value:u,css:i}=g($);return i&&s.push(i),u})}),{result:t,additionalCss:s}},B=t=>typeof t!="string"?{result:t}:/\{[^{}]+\}/g.test(t)?{result:t.replace(/\{([^{}]+)\}/g,(...n)=>`var(--${N(n[1].replaceAll(".","-"))})`)}:{result:t},D=(t,e,s,n)=>{if(!t)return"";const r=[],g=Object.entries(t).reduce((u,[i,o])=>{const c=i.trim();if(typeof o=="function"&&(o=o()),typeof o=="object"){if(!o)return u;if(c==="variants")return Object.entries(o).forEach(([f,a])=>{a&&Object.entries(a).forEach(([p,l])=>{if(!l)return;const w=`${e}.${f}-${p}`,x=D(l,w);r.push(x)})}),u;if(c==="defaultVariants")return u;if(c==="compoundVariants")return o.forEach(f=>{const{css:a,...p}=f,l=Object.entries(p).reduce((x,[k,P])=>`${x}.${k}-${P}`,e),w=D(a,l);r.push(w)}),u;if(c.startsWith("@")){const f=D(o,e),a=`${c} {
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const K=require("esbuild"),G=require("child_process"),p=require("path"),m=require("fs"),L=require("fs/promises");function U(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 B=U(K),q=t=>String.fromCharCode(t+(t>25?39:97)),X=(t,e)=>{let s="",n;for(n=Math.abs(t);n>52;n=n/52|0)s=q(n%52)+s;return s=q(n%52)+s,s.length<e?s=s.padStart(e,"a"):s.length>e&&(s=s.slice(-e)),s},Y=(t,e)=>{let s=e.length;for(;s;)t=t*33^e.charCodeAt(--s);return t},_=(t,e=3)=>{const s=Y(5381,JSON.stringify(t))>>>0;return X(s,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,s)=>(s>0?"-":"")+e.toLowerCase()):""}const Q=(t,e)=>{if(typeof t!="string")return{result:t};if(!e)return{result:t};const s=[];return Object.values(e).forEach(n=>{const{pattern:r,transform:d}=n;t=t.replace(r,$=>{const{value:u,css:i}=d($);return i&&s.push(i),u})}),{result:t,additionalCss:s}},I=t=>typeof t!="string"?{result:t}:/\{[^{}]+\}/g.test(t)?{result:t.replace(/\{([^{}]+)\}/g,(...n)=>`var(--${N(n[1].replaceAll(".","-"))})`)}:{result:t},P=(t,e,s,n)=>{if(!t)return"";const r=[],d=Object.entries(t).reduce((u,[i,o])=>{const c=i.trim();if(typeof o=="function"&&(o=o()),typeof o=="object"){if(!o)return u;if(c==="variants")return Object.entries(o).forEach(([f,l])=>{l&&Object.entries(l).forEach(([h,g])=>{if(!g)return;const b=`${e}.${f}-${h}`,j=P(g,b);r.push(j)})}),u;if(c==="defaultVariants")return u;if(c==="compoundVariants")return o.forEach(f=>{const{css:l,...h}=f,g=Object.entries(h).reduce((j,[x,k])=>`${j}.${x}-${k}`,e),b=P(l,g);r.push(b)}),u;if(c.startsWith("@")){const f=P(o,e),l=`${c} {
2
2
  ${f.replace(`
3
3
  `,`
4
4
  `)}
5
- }`;return r.push(a),u}const m=i.includes("&")?c.replace("&",e):c.startsWith(":")?`${e}${c}`:`${e} ${c}`,O=D(o,m);return r.push(O),u}const d=c.startsWith("-")?c:N(c),b=(m,O=";")=>u=`${u}${m}${O}`,F=m=>b(`${d}:${m}`);if(typeof o=="number")return F(o);if(typeof o!="string")if("toString"in o)o=o.toString();else return u;const{modifiers:j}={},C=function*(){yield B(o),yield X(o,j)}();for(const{result:m,additionalCss:O=[]}of C)o=m,O.forEach(f=>{const a=D(f,"");b(a,"")});return F(o)},"");if(!g)return r.join(`
6
- `);if(!e)return g;let $="";return $=`${e} { ${g} }`,[$,...r].join(`
7
- `)},I=(t,e=[])=>{if(!t)return"";const s=[],n={};if(Object.entries(t).forEach(([r,g])=>{if(typeof g=="object"){if(!g)return;const $=r.trim(),u=I(g,[...e,$]);s.push(u)}else n[r]=g}),Object.keys(n).length){const r=e.map(N).join("-"),g=D(n,`.${r}`);s.push(g)}return s.join(`
8
- `)},V=t=>y.join(t,"./saltygen"),Y=["salty","css","styles","styled"],Q=(t=[])=>new RegExp(`\\.(${[...Y,...t].join("|")})\\.`),T=(t,e=[])=>Q(e).test(t),v=async t=>{const e=V(t),s=y.join(t,"salty.config.ts"),n=y.join(e,"salty.config.js");await q.build({entryPoints:[s],minify:!0,treeShaking:!0,bundle:!0,outfile:n,format:"esm",external:["react"]});const r=Date.now(),{config:g}=await import(`${n}?t=${r}`);return g},Z=async t=>{const e=await v(t),s=new Set,n=(f,a=[])=>f?Object.entries(f).flatMap(([p,l])=>{if(!l)return;if(typeof l=="object")return n(l,[...a,p]);const w=[...a,p].join(".");s.add(`"${w}"`);const x=[...a.map(N),N(p)].join("-"),{result:k}=B(l);return`--${x}: ${k};`}):[],r=f=>f?Object.entries(f).flatMap(([a,p])=>{const l=n(p);return a==="base"?l.join(""):`${a} { ${l.join("")} }`}):[],g=f=>f?Object.entries(f).flatMap(([a,p])=>Object.entries(p).flatMap(([l,w])=>{const x=n(w,[a]),k=`.${a}-${l}, [data-${a}="${l}"]`,P=x.join("");return`${k} { ${P} }`})):[],$=n(e.variables),u=r(e.responsiveVariables),i=g(e.conditionalVariables),o=V(t),c=y.join(o,"css/variables.css"),d=`:root { ${$.join("")} ${u.join("")} } ${i.join("")}`;h.writeFileSync(c,d);const b=y.join(o,"types/css-tokens.d.ts"),j=`type VariableTokens = ${[...s].join("|")||'""'}; type PropertyValueToken = \`{\${VariableTokens}}\``;h.writeFileSync(b,j);const S=y.join(o,"css/global.css"),C=D(e.global,"");h.writeFileSync(S,C);const m=y.join(o,"css/templates.css"),O=I(e.templates);h.writeFileSync(m,O)},M=async(t,e)=>{const s=_(t),n=y.join(e,"js",s+".js");await q.build({entryPoints:[t],minify:!0,treeShaking:!0,bundle:!0,outfile:n,format:"esm",target:["es2022"],keepNames:!0,external:["react"]});const r=Date.now();return await import(`${n}?t=${r}`)},A=async t=>{const e=V(t),s=y.join(e,"salty.config.js"),{config:n}=await import(s);return n},tt=async t=>{try{const e=[],s=[],n=V(t),r=y.join(n,"index.css");(()=>{h.existsSync(n)&&J.execSync("rm -rf "+n),h.mkdirSync(n),h.mkdirSync(y.join(n,"css")),h.mkdirSync(y.join(n,"types"))})(),await Z(t);const $=await A(t);async function u(d,b){const F=h.statSync(d);if(F.isDirectory()){const j=h.readdirSync(d);await Promise.all(j.map(S=>u(y.join(d,S),y.join(b,S))))}else if(F.isFile()&&T(d)){const S=await M(d,n),C=[];Object.entries(S).forEach(([a,p])=>{if(p.isKeyframes&&p.css){const P=`${p.animationName}.css`,E=`css/${P}`,H=y.join(n,E);e.push(P),h.writeFileSync(H,p.css);return}if(!p.generator)return;const l=p.generator._withBuildContext({name:a,config:$}),w=`${l.hash}-${l.priority}.css`;s[l.priority]||(s[l.priority]=[]),s[l.priority].push(w),C.push(w);const x=`css/${w}`,k=y.join(n,x);h.writeFileSync(k,l.css)});const m=C.map(a=>`@import url('./${a}');`).join(`
9
- `),O=_(d,6),f=y.join(n,`css/${O}.css`);h.writeFileSync(f,m)}}await u(t,n);const i=e.map(d=>`@import url('./css/${d}');`).join(`
10
- `);let c=`@layer l0, l1, l2, l3, l4, l5, l6, l7, l8;
5
+ }`;return r.push(l),u}const y=i.includes("&")?c.replace("&",e):c.startsWith(":")?`${e}${c}`:`${e} ${c}`,C=P(o,y);return r.push(C),u}const D=c.startsWith("-")?c:N(c),S=(y,C=";")=>u=`${u}${y}${C}`,a=y=>S(`${D}:${y}`);if(typeof o=="number")return a(o);if(typeof o!="string")if("toString"in o)o=o.toString();else return u;const{modifiers:w}={},F=function*(){yield I(o),yield Q(o,w)}();for(const{result:y,additionalCss:C=[]}of F)o=y,C.forEach(f=>{const l=P(f,"");S(l,"")});return a(o)},"");if(!d)return r.join(`
6
+ `);if(!e)return d;let $="";return $=`${e} { ${d} }`,[$,...r].join(`
7
+ `)},W=(t,e=[])=>{if(!t)return"";const s=[],n={};if(Object.entries(t).forEach(([r,d])=>{if(typeof d=="object"){if(!d)return;const $=r.trim(),u=W(d,[...e,$]);s.push(u)}else n[r]=d}),Object.keys(n).length){const r=e.map(N).join("-"),d=P(n,`.${r}`);s.push(d)}return s.join(`
8
+ `)},V=t=>p.join(t,"./saltygen"),v=["salty","css","styles","styled"],tt=(t=[])=>new RegExp(`\\.(${[...v,...t].join("|")})\\.`),T=(t,e=[])=>tt(e).test(t),et=async t=>{const e=V(t),s=p.join(t,"salty.config.ts"),n=p.join(e,"salty.config.js");await B.build({entryPoints:[s],minify:!0,treeShaking:!0,bundle:!0,outfile:n,format:"esm",external:["react"]});const r=Date.now(),{config:d}=await import(`${n}?t=${r}`);return d},Z=async t=>{const e=await et(t),s=new Set,n=(f,l=[])=>f?Object.entries(f).flatMap(([h,g])=>{if(!g)return;if(typeof g=="object")return n(g,[...l,h]);const b=[...l,h].join(".");s.add(`"${b}"`);const j=[...l.map(N),N(h)].join("-"),{result:x}=I(g);return`--${j}: ${x};`}):[],r=f=>f?Object.entries(f).flatMap(([l,h])=>{const g=n(h);return l==="base"?g.join(""):`${l} { ${g.join("")} }`}):[],d=f=>f?Object.entries(f).flatMap(([l,h])=>Object.entries(h).flatMap(([g,b])=>{const j=n(b,[l]),x=`.${l}-${g}, [data-${l}="${g}"]`,k=j.join("");return`${x} { ${k} }`})):[],$=n(e.variables),u=r(e.responsiveVariables),i=d(e.conditionalVariables),o=V(t),c=p.join(o,"css/variables.css"),D=`:root { ${$.join("")} ${u.join("")} } ${i.join("")}`;m.writeFileSync(c,D);const S=p.join(o,"types/css-tokens.d.ts"),w=`type VariableTokens = ${[...s].join("|")||'""'}; type PropertyValueToken = \`{\${VariableTokens}}\``;m.writeFileSync(S,w);const O=p.join(o,"css/global.css"),F=P(e.global,"");m.writeFileSync(O,F);const y=p.join(o,"css/templates.css"),C=W(e.templates);m.writeFileSync(y,C)},M=async(t,e)=>{const s=_(t),n=p.join(e,"js",s+".js");await B.build({entryPoints:[t],minify:!0,treeShaking:!0,bundle:!0,outfile:n,format:"esm",target:["es2022"],keepNames:!0,external:["react"]});const r=Date.now();return await import(`${n}?t=${r}`)},A=async t=>{const e=V(t),s=p.join(e,"salty.config.js"),{config:n}=await import(s);return n},st=async t=>{try{const e=[],s=[],n=V(t),r=p.join(n,"index.css");(()=>{m.existsSync(n)&&G.execSync("rm -rf "+n),m.mkdirSync(n),m.mkdirSync(p.join(n,"css")),m.mkdirSync(p.join(n,"types"))})(),await Z(t);const $=await A(t);async function u(a,w){const O=m.statSync(a);if(O.isDirectory()){const F=m.readdirSync(a);await Promise.all(F.map(y=>u(p.join(a,y),p.join(w,y))))}else if(O.isFile()&&T(a)){const y=await M(a,n),C=[];Object.entries(y).forEach(([g,b])=>{if(b.isKeyframes&&b.css){const R=`${b.animationName}.css`,H=`css/${R}`,J=p.join(n,H);e.push(R),m.writeFileSync(J,b.css);return}if(!b.generator)return;const j=b.generator._withBuildContext({name:g,config:$}),x=`${j.hash}-${j.priority}.css`;s[j.priority]||(s[j.priority]=[]),s[j.priority].push(x),C.push(x);const k=`css/${x}`,E=p.join(n,k);m.writeFileSync(E,j.css)});const f=C.map(g=>`@import url('./${g}');`).join(`
9
+ `),l=_(a,6),h=p.join(n,`css/${l}.css`);m.writeFileSync(h,f)}}await u(t,n);const i=e.map(a=>`@import url('./css/${a}');`).join(`
10
+ `);let S=`@layer l0, l1, l2, l3, l4, l5, l6, l7, l8;
11
11
 
12
- ${["@import url('./css/variables.css');","@import url('./css/global.css');","@import url('./css/templates.css');"].join(`
12
+ ${["variables.css","global.css","templates.css"].filter(a=>{try{return m.readFileSync(p.join(n,"css",a),"utf8").length>0}catch{return!1}}).map(a=>`@import url('./css/${a}');`).join(`
13
13
  `)}
14
- ${i}`;if($.importStrategy!=="component"){const d=s.flat().map(b=>`@import url('./css/${b}');`).join(`
15
- `);c+=d}h.writeFileSync(r,c)}catch(e){console.error(e)}},et=async(t,e)=>{try{const s=[],n=y.join(t,"./saltygen"),r=y.join(n,"index.css");if(T(e)){const $=await A(t),u=await M(e,n);Object.entries(u).forEach(([b,F])=>{if(!F.generator)return;const j=F.generator._withBuildContext({name:b,config:$}),S=`${j.hash}-${j.priority}.css`,C=`css/${S}`,m=y.join(n,C);s.push(S),h.writeFileSync(m,j.css)});const i=h.readFileSync(r,"utf8").split(`
16
- `),o=s.map(b=>`@import url('../saltygen/css/${b}');`),d=[...new Set([...i,...o])].join(`
17
- `);h.writeFileSync(r,d)}}catch(s){console.error(s)}},st=async(t,e)=>{try{const s=y.join(t,"./saltygen");if(T(e)){const r=h.readFileSync(e,"utf8");r.replace(/^(?!export\s)const\s.*/gm,c=>`export ${c}`)!==r&&await K.writeFile(e,r);const $=await A(t),u=await M(e,s);let i=r;Object.entries(u).forEach(([c,d])=>{var P;if(d.isKeyframes||!d.generator)return;const b=d.generator._withBuildContext({name:c,config:$}),F=new RegExp(`\\s${c}[=\\s]+[^()]+styled\\(([^,]+),`,"g").exec(r);if(!F)return console.error("Could not find the original declaration");const j=(P=F.at(1))==null?void 0:P.trim(),S=new RegExp(`\\s${c}[=\\s]+styled\\(`,"g").exec(i);if(!S)return console.error("Could not find the original declaration");const{index:C}=S;let m=!1;const O=setTimeout(()=>m=!0,5e3);let f=0,a=!1,p=0;for(;!a&&!m;){const E=i[C+f];E==="("&&p++,E===")"&&p--,p===0&&E===")"&&(a=!0),f>i.length&&(m=!0),f++}if(!m)clearTimeout(O);else throw new Error("Failed to find the end of the styled call and timed out");const l=C+f,w=i.slice(C,l),x=i,k=` ${c} = styled(${j}, "${b.classNames}", "${b._callerName}", ${JSON.stringify(b.props)});`;i=i.replace(w,k),x===i&&console.error("Minimize file failed to change content",{name:c,tagName:j})});const o=_(e,6);return $.importStrategy==="component"&&(i=`import '../../saltygen/css/${o}.css';
18
- ${i}`),i=i.replace("{ styled }","{ styledClient as styled }"),i=i.replace("@salty-css/react/styled","@salty-css/react/styled-client"),i}}catch(s){console.error("Error in minimizeFile:",s)}},z=t=>({name:"stylegen",buildStart:()=>tt(t),load:async e=>{if(T(e))return await st(t,e)},watchChange:{handler:async e=>{T(e)&&await et(t,e),e.includes("salty.config")&&await Z(t)}}});exports.default=z;exports.saltyPlugin=z;
14
+ ${i}`;if($.importStrategy!=="component"){const a=s.flat().map(w=>`@import url('./css/${w}');`).join(`
15
+ `);S+=a}m.writeFileSync(r,S)}catch(e){console.error(e)}},nt=async(t,e)=>{try{const s=[],n=p.join(t,"./saltygen"),r=p.join(n,"index.css");if(T(e)){const $=await A(t),u=await M(e,n);Object.entries(u).forEach(([S,a])=>{if(!a.generator)return;const w=a.generator._withBuildContext({name:S,config:$}),O=`${w.hash}-${w.priority}.css`,F=`css/${O}`,y=p.join(n,F);s.push(O),m.writeFileSync(y,w.css)});const i=m.readFileSync(r,"utf8").split(`
16
+ `),o=s.map(S=>`@import url('../saltygen/css/${S}');`),D=[...new Set([...i,...o])].join(`
17
+ `);m.writeFileSync(r,D)}}catch(s){console.error(s)}},rt=async(t,e)=>{try{const s=p.join(t,"./saltygen");if(T(e)){const r=m.readFileSync(e,"utf8");r.replace(/^(?!export\s)const\s.*/gm,c=>`export ${c}`)!==r&&await L.writeFile(e,r);const $=await A(t),u=await M(e,s);let i=r;Object.entries(u).forEach(([c,D])=>{var k;if(D.isKeyframes||!D.generator)return;const S=D.generator._withBuildContext({name:c,config:$}),a=new RegExp(`\\s${c}[=\\s]+[^()]+styled\\(([^,]+),`,"g").exec(r);if(!a)return console.error("Could not find the original declaration");const w=(k=a.at(1))==null?void 0:k.trim(),O=new RegExp(`\\s${c}[=\\s]+styled\\(`,"g").exec(i);if(!O)return console.error("Could not find the original declaration");const{index:F}=O;let y=!1;const C=setTimeout(()=>y=!0,5e3);let f=0,l=!1,h=0;for(;!l&&!y;){const E=i[F+f];E==="("&&h++,E===")"&&h--,h===0&&E===")"&&(l=!0),f>i.length&&(y=!0),f++}if(!y)clearTimeout(C);else throw new Error("Failed to find the end of the styled call and timed out");const g=F+f,b=i.slice(F,g),j=i,x=` ${c} = styled(${w}, "${S.classNames}", "${S._callerName}", ${JSON.stringify(S.props)});`;i=i.replace(b,x),j===i&&console.error("Minimize file failed to change content",{name:c,tagName:w})});const o=_(e,6);return $.importStrategy==="component"&&(i=`import '../../saltygen/css/${o}.css';
18
+ ${i}`),i=i.replace("{ styled }","{ styledClient as styled }"),i=i.replace("@salty-css/react/styled","@salty-css/react/styled-client"),i}}catch(s){console.error("Error in minimizeFile:",s)}},z=t=>({name:"stylegen",buildStart:()=>st(t),load:async e=>{if(T(e))return await rt(t,e)},watchChange:{handler:async e=>{T(e)&&await nt(t,e),e.includes("salty.config")&&await Z(t)}}});exports.default=z;exports.saltyPlugin=z;
package/index.js CHANGED
@@ -1,106 +1,106 @@
1
- import * as I from "esbuild";
2
- import { execSync as K } from "child_process";
3
- import { join as y } from "path";
4
- import { writeFileSync as k, existsSync as q, mkdirSync as A, statSync as G, readdirSync as L, readFileSync as Z } from "fs";
5
- import { writeFile as U } from "fs/promises";
6
- const B = (t) => String.fromCharCode(t + (t > 25 ? 39 : 97)), X = (t, s) => {
1
+ import * as Z from "esbuild";
2
+ import { execSync as G } from "child_process";
3
+ import { join as u } from "path";
4
+ import { writeFileSync as k, existsSync as L, mkdirSync as A, statSync as U, readdirSync as X, readFileSync as M } from "fs";
5
+ import { writeFile as Y } from "fs/promises";
6
+ const W = (t) => String.fromCharCode(t + (t > 25 ? 39 : 97)), Q = (t, s) => {
7
7
  let e = "", n;
8
- for (n = Math.abs(t); n > 52; n = n / 52 | 0) e = B(n % 52) + e;
9
- return e = B(n % 52) + e, e.length < s ? e = e.padStart(s, "a") : e.length > s && (e = e.slice(-s)), e;
10
- }, Y = (t, s) => {
8
+ for (n = Math.abs(t); n > 52; n = n / 52 | 0) e = W(n % 52) + e;
9
+ return e = W(n % 52) + e, e.length < s ? e = e.padStart(s, "a") : e.length > s && (e = e.slice(-s)), e;
10
+ }, v = (t, s) => {
11
11
  let e = s.length;
12
12
  for (; e; ) t = t * 33 ^ s.charCodeAt(--e);
13
13
  return t;
14
- }, M = (t, s = 3) => {
15
- const e = Y(5381, JSON.stringify(t)) >>> 0;
16
- return X(e, s);
14
+ }, R = (t, s = 3) => {
15
+ const e = v(5381, JSON.stringify(t)) >>> 0;
16
+ return Q(e, s);
17
17
  };
18
18
  function O(t) {
19
19
  return t ? typeof t != "string" ? O(String(t)) : t.replace(/\s/g, "-").replace(/[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g, (s, e) => (e > 0 ? "-" : "") + s.toLowerCase()) : "";
20
20
  }
21
- const Q = (t, s) => {
21
+ const tt = (t, s) => {
22
22
  if (typeof t != "string") return { result: t };
23
23
  if (!s) return { result: t };
24
24
  const e = [];
25
25
  return Object.values(s).forEach((n) => {
26
- const { pattern: r, transform: g } = n;
26
+ const { pattern: r, transform: m } = n;
27
27
  t = t.replace(r, (h) => {
28
- const { value: p, css: i } = g(h);
28
+ const { value: p, css: i } = m(h);
29
29
  return i && e.push(i), p;
30
30
  });
31
31
  }), { result: t, additionalCss: e };
32
32
  }, z = (t) => typeof t != "string" ? { result: t } : /\{[^{}]+\}/g.test(t) ? { result: t.replace(/\{([^{}]+)\}/g, (...n) => `var(--${O(n[1].replaceAll(".", "-"))})`) } : { result: t }, N = (t, s, e, n) => {
33
33
  if (!t) return "";
34
- const r = [], g = Object.entries(t).reduce((p, [i, o]) => {
34
+ const r = [], m = Object.entries(t).reduce((p, [i, o]) => {
35
35
  const c = i.trim();
36
36
  if (typeof o == "function" && (o = o()), typeof o == "object") {
37
37
  if (!o) return p;
38
38
  if (c === "variants")
39
- return Object.entries(o).forEach(([f, a]) => {
40
- a && Object.entries(a).forEach(([u, l]) => {
41
- if (!l) return;
42
- const j = `${s}.${f}-${u}`, x = N(l, j);
43
- r.push(x);
39
+ return Object.entries(o).forEach(([f, l]) => {
40
+ l && Object.entries(l).forEach(([d, g]) => {
41
+ if (!g) return;
42
+ const $ = `${s}.${f}-${d}`, b = N(g, $);
43
+ r.push(b);
44
44
  });
45
45
  }), p;
46
46
  if (c === "defaultVariants")
47
47
  return p;
48
48
  if (c === "compoundVariants")
49
49
  return o.forEach((f) => {
50
- const { css: a, ...u } = f, l = Object.entries(u).reduce((x, [D, E]) => `${x}.${D}-${E}`, s), j = N(a, l);
51
- r.push(j);
50
+ const { css: l, ...d } = f, g = Object.entries(d).reduce((b, [x, E]) => `${b}.${x}-${E}`, s), $ = N(l, g);
51
+ r.push($);
52
52
  }), p;
53
53
  if (c.startsWith("@")) {
54
- const f = N(o, s), a = `${c} {
54
+ const f = N(o, s), l = `${c} {
55
55
  ${f.replace(`
56
56
  `, `
57
57
  `)}
58
58
  }`;
59
- return r.push(a), p;
59
+ return r.push(l), p;
60
60
  }
61
- const d = i.includes("&") ? c.replace("&", s) : c.startsWith(":") ? `${s}${c}` : `${s} ${c}`, C = N(o, d);
62
- return r.push(C), p;
61
+ const y = i.includes("&") ? c.replace("&", s) : c.startsWith(":") ? `${s}${c}` : `${s} ${c}`, F = N(o, y);
62
+ return r.push(F), p;
63
63
  }
64
- const m = c.startsWith("-") ? c : O(c), $ = (d, C = ";") => p = `${p}${d}${C}`, S = (d) => $(`${m}:${d}`);
65
- if (typeof o == "number") return S(o);
64
+ const D = c.startsWith("-") ? c : O(c), w = (y, F = ";") => p = `${p}${y}${F}`, a = (y) => w(`${D}:${y}`);
65
+ if (typeof o == "number") return a(o);
66
66
  if (typeof o != "string")
67
67
  if ("toString" in o) o = o.toString();
68
68
  else return p;
69
- const { modifiers: b } = {}, F = function* () {
70
- yield z(o), yield Q(o, b);
69
+ const { modifiers: j } = {}, S = function* () {
70
+ yield z(o), yield tt(o, j);
71
71
  }();
72
- for (const { result: d, additionalCss: C = [] } of F)
73
- o = d, C.forEach((f) => {
74
- const a = N(f, "");
75
- $(a, "");
72
+ for (const { result: y, additionalCss: F = [] } of S)
73
+ o = y, F.forEach((f) => {
74
+ const l = N(f, "");
75
+ w(l, "");
76
76
  });
77
- return S(o);
77
+ return a(o);
78
78
  }, "");
79
- if (!g) return r.join(`
79
+ if (!m) return r.join(`
80
80
  `);
81
- if (!s) return g;
81
+ if (!s) return m;
82
82
  let h = "";
83
- return h = `${s} { ${g} }`, [h, ...r].join(`
83
+ return h = `${s} { ${m} }`, [h, ...r].join(`
84
84
  `);
85
85
  }, H = (t, s = []) => {
86
86
  if (!t) return "";
87
87
  const e = [], n = {};
88
- if (Object.entries(t).forEach(([r, g]) => {
89
- if (typeof g == "object") {
90
- if (!g) return;
91
- const h = r.trim(), p = H(g, [...s, h]);
88
+ if (Object.entries(t).forEach(([r, m]) => {
89
+ if (typeof m == "object") {
90
+ if (!m) return;
91
+ const h = r.trim(), p = H(m, [...s, h]);
92
92
  e.push(p);
93
93
  } else
94
- n[r] = g;
94
+ n[r] = m;
95
95
  }), Object.keys(n).length) {
96
- const r = s.map(O).join("-"), g = N(n, `.${r}`);
97
- e.push(g);
96
+ const r = s.map(O).join("-"), m = N(n, `.${r}`);
97
+ e.push(m);
98
98
  }
99
99
  return e.join(`
100
100
  `);
101
- }, T = (t) => y(t, "./saltygen"), v = ["salty", "css", "styles", "styled"], tt = (t = []) => new RegExp(`\\.(${[...v, ...t].join("|")})\\.`), V = (t, s = []) => tt(s).test(t), st = async (t) => {
102
- const s = T(t), e = y(t, "salty.config.ts"), n = y(s, "salty.config.js");
103
- await I.build({
101
+ }, T = (t) => u(t, "./saltygen"), st = ["salty", "css", "styles", "styled"], et = (t = []) => new RegExp(`\\.(${[...st, ...t].join("|")})\\.`), V = (t, s = []) => et(s).test(t), nt = async (t) => {
102
+ const s = T(t), e = u(t, "salty.config.ts"), n = u(s, "salty.config.js");
103
+ await Z.build({
104
104
  entryPoints: [e],
105
105
  minify: !0,
106
106
  treeShaking: !0,
@@ -109,33 +109,33 @@ const Q = (t, s) => {
109
109
  format: "esm",
110
110
  external: ["react"]
111
111
  });
112
- const r = Date.now(), { config: g } = await import(`${n}?t=${r}`);
113
- return g;
114
- }, W = async (t) => {
115
- const s = await st(t), e = /* @__PURE__ */ new Set(), n = (f, a = []) => f ? Object.entries(f).flatMap(([u, l]) => {
116
- if (!l) return;
117
- if (typeof l == "object") return n(l, [...a, u]);
118
- const j = [...a, u].join(".");
119
- e.add(`"${j}"`);
120
- const x = [...a.map(O), O(u)].join("-"), { result: D } = z(l);
121
- return `--${x}: ${D};`;
122
- }) : [], r = (f) => f ? Object.entries(f).flatMap(([a, u]) => {
123
- const l = n(u);
124
- return a === "base" ? l.join("") : `${a} { ${l.join("")} }`;
125
- }) : [], g = (f) => f ? Object.entries(f).flatMap(([a, u]) => Object.entries(u).flatMap(([l, j]) => {
126
- const x = n(j, [a]), D = `.${a}-${l}, [data-${a}="${l}"]`, E = x.join("");
127
- return `${D} { ${E} }`;
128
- })) : [], h = n(s.variables), p = r(s.responsiveVariables), i = g(s.conditionalVariables), o = T(t), c = y(o, "css/variables.css"), m = `:root { ${h.join("")} ${p.join("")} } ${i.join("")}`;
129
- k(c, m);
130
- const $ = y(o, "types/css-tokens.d.ts"), b = `type VariableTokens = ${[...e].join("|") || '""'}; type PropertyValueToken = \`{\${VariableTokens}}\``;
131
- k($, b);
132
- const w = y(o, "css/global.css"), F = N(s.global, "");
133
- k(w, F);
134
- const d = y(o, "css/templates.css"), C = H(s.templates);
135
- k(d, C);
136
- }, R = async (t, s) => {
137
- const e = M(t), n = y(s, "js", e + ".js");
138
- await I.build({
112
+ const r = Date.now(), { config: m } = await import(`${n}?t=${r}`);
113
+ return m;
114
+ }, J = async (t) => {
115
+ const s = await nt(t), e = /* @__PURE__ */ new Set(), n = (f, l = []) => f ? Object.entries(f).flatMap(([d, g]) => {
116
+ if (!g) return;
117
+ if (typeof g == "object") return n(g, [...l, d]);
118
+ const $ = [...l, d].join(".");
119
+ e.add(`"${$}"`);
120
+ const b = [...l.map(O), O(d)].join("-"), { result: x } = z(g);
121
+ return `--${b}: ${x};`;
122
+ }) : [], r = (f) => f ? Object.entries(f).flatMap(([l, d]) => {
123
+ const g = n(d);
124
+ return l === "base" ? g.join("") : `${l} { ${g.join("")} }`;
125
+ }) : [], m = (f) => f ? Object.entries(f).flatMap(([l, d]) => Object.entries(d).flatMap(([g, $]) => {
126
+ const b = n($, [l]), x = `.${l}-${g}, [data-${l}="${g}"]`, E = b.join("");
127
+ return `${x} { ${E} }`;
128
+ })) : [], h = n(s.variables), p = r(s.responsiveVariables), i = m(s.conditionalVariables), o = T(t), c = u(o, "css/variables.css"), D = `:root { ${h.join("")} ${p.join("")} } ${i.join("")}`;
129
+ k(c, D);
130
+ const w = u(o, "types/css-tokens.d.ts"), j = `type VariableTokens = ${[...e].join("|") || '""'}; type PropertyValueToken = \`{\${VariableTokens}}\``;
131
+ k(w, j);
132
+ const C = u(o, "css/global.css"), S = N(s.global, "");
133
+ k(C, S);
134
+ const y = u(o, "css/templates.css"), F = H(s.templates);
135
+ k(y, F);
136
+ }, _ = async (t, s) => {
137
+ const e = R(t), n = u(s, "js", e + ".js");
138
+ await Z.build({
139
139
  entryPoints: [t],
140
140
  minify: !0,
141
141
  treeShaking: !0,
@@ -148,133 +148,139 @@ const Q = (t, s) => {
148
148
  });
149
149
  const r = Date.now();
150
150
  return await import(`${n}?t=${r}`);
151
- }, _ = async (t) => {
152
- const s = T(t), e = y(s, "salty.config.js"), { config: n } = await import(e);
151
+ }, B = async (t) => {
152
+ const s = T(t), e = u(s, "salty.config.js"), { config: n } = await import(e);
153
153
  return n;
154
- }, et = async (t) => {
154
+ }, rt = async (t) => {
155
155
  try {
156
- const s = [], e = [], n = T(t), r = y(n, "index.css");
156
+ const s = [], e = [], n = T(t), r = u(n, "index.css");
157
157
  (() => {
158
- q(n) && K("rm -rf " + n), A(n), A(y(n, "css")), A(y(n, "types"));
159
- })(), await W(t);
160
- const h = await _(t);
161
- async function p(m, $) {
162
- const S = G(m);
163
- if (S.isDirectory()) {
164
- const b = L(m);
165
- await Promise.all(b.map((w) => p(y(m, w), y($, w))));
166
- } else if (S.isFile() && V(m)) {
167
- const w = await R(m, n), F = [];
168
- Object.entries(w).forEach(([a, u]) => {
169
- if (u.isKeyframes && u.css) {
170
- const E = `${u.animationName}.css`, P = `css/${E}`, J = y(n, P);
171
- s.push(E), k(J, u.css);
158
+ L(n) && G("rm -rf " + n), A(n), A(u(n, "css")), A(u(n, "types"));
159
+ })(), await J(t);
160
+ const h = await B(t);
161
+ async function p(a, j) {
162
+ const C = U(a);
163
+ if (C.isDirectory()) {
164
+ const S = X(a);
165
+ await Promise.all(S.map((y) => p(u(a, y), u(j, y))));
166
+ } else if (C.isFile() && V(a)) {
167
+ const y = await _(a, n), F = [];
168
+ Object.entries(y).forEach(([g, $]) => {
169
+ if ($.isKeyframes && $.css) {
170
+ const I = `${$.animationName}.css`, K = `css/${I}`, q = u(n, K);
171
+ s.push(I), k(q, $.css);
172
172
  return;
173
173
  }
174
- if (!u.generator) return;
175
- const l = u.generator._withBuildContext({
176
- name: a,
174
+ if (!$.generator) return;
175
+ const b = $.generator._withBuildContext({
176
+ name: g,
177
177
  config: h
178
- }), j = `${l.hash}-${l.priority}.css`;
179
- e[l.priority] || (e[l.priority] = []), e[l.priority].push(j), F.push(j);
180
- const x = `css/${j}`, D = y(n, x);
181
- k(D, l.css);
178
+ }), x = `${b.hash}-${b.priority}.css`;
179
+ e[b.priority] || (e[b.priority] = []), e[b.priority].push(x), F.push(x);
180
+ const E = `css/${x}`, P = u(n, E);
181
+ k(P, b.css);
182
182
  });
183
- const d = F.map((a) => `@import url('./${a}');`).join(`
184
- `), C = M(m, 6), f = y(n, `css/${C}.css`);
185
- k(f, d);
183
+ const f = F.map((g) => `@import url('./${g}');`).join(`
184
+ `), l = R(a, 6), d = u(n, `css/${l}.css`);
185
+ k(d, f);
186
186
  }
187
187
  }
188
188
  await p(t, n);
189
- const i = s.map((m) => `@import url('./css/${m}');`).join(`
189
+ const i = s.map((a) => `@import url('./css/${a}');`).join(`
190
190
  `);
191
- let c = `@layer l0, l1, l2, l3, l4, l5, l6, l7, l8;
191
+ let w = `@layer l0, l1, l2, l3, l4, l5, l6, l7, l8;
192
192
 
193
- ${["@import url('./css/variables.css');", "@import url('./css/global.css');", "@import url('./css/templates.css');"].join(`
193
+ ${["variables.css", "global.css", "templates.css"].filter((a) => {
194
+ try {
195
+ return M(u(n, "css", a), "utf8").length > 0;
196
+ } catch {
197
+ return !1;
198
+ }
199
+ }).map((a) => `@import url('./css/${a}');`).join(`
194
200
  `)}
195
201
  ${i}`;
196
202
  if (h.importStrategy !== "component") {
197
- const m = e.flat().map(($) => `@import url('./css/${$}');`).join(`
203
+ const a = e.flat().map((j) => `@import url('./css/${j}');`).join(`
198
204
  `);
199
- c += m;
205
+ w += a;
200
206
  }
201
- k(r, c);
207
+ k(r, w);
202
208
  } catch (s) {
203
209
  console.error(s);
204
210
  }
205
- }, nt = async (t, s) => {
211
+ }, ot = async (t, s) => {
206
212
  try {
207
- const e = [], n = y(t, "./saltygen"), r = y(n, "index.css");
213
+ const e = [], n = u(t, "./saltygen"), r = u(n, "index.css");
208
214
  if (V(s)) {
209
- const h = await _(t), p = await R(s, n);
210
- Object.entries(p).forEach(([$, S]) => {
211
- if (!S.generator) return;
212
- const b = S.generator._withBuildContext({
213
- name: $,
215
+ const h = await B(t), p = await _(s, n);
216
+ Object.entries(p).forEach(([w, a]) => {
217
+ if (!a.generator) return;
218
+ const j = a.generator._withBuildContext({
219
+ name: w,
214
220
  config: h
215
- }), w = `${b.hash}-${b.priority}.css`, F = `css/${w}`, d = y(n, F);
216
- e.push(w), k(d, b.css);
221
+ }), C = `${j.hash}-${j.priority}.css`, S = `css/${C}`, y = u(n, S);
222
+ e.push(C), k(y, j.css);
217
223
  });
218
- const i = Z(r, "utf8").split(`
219
- `), o = e.map(($) => `@import url('../saltygen/css/${$}');`), m = [.../* @__PURE__ */ new Set([...i, ...o])].join(`
224
+ const i = M(r, "utf8").split(`
225
+ `), o = e.map((w) => `@import url('../saltygen/css/${w}');`), D = [.../* @__PURE__ */ new Set([...i, ...o])].join(`
220
226
  `);
221
- k(r, m);
227
+ k(r, D);
222
228
  }
223
229
  } catch (e) {
224
230
  console.error(e);
225
231
  }
226
- }, rt = async (t, s) => {
232
+ }, it = async (t, s) => {
227
233
  try {
228
- const e = y(t, "./saltygen");
234
+ const e = u(t, "./saltygen");
229
235
  if (V(s)) {
230
- const r = Z(s, "utf8");
231
- r.replace(/^(?!export\s)const\s.*/gm, (c) => `export ${c}`) !== r && await U(s, r);
232
- const h = await _(t), p = await R(s, e);
236
+ const r = M(s, "utf8");
237
+ r.replace(/^(?!export\s)const\s.*/gm, (c) => `export ${c}`) !== r && await Y(s, r);
238
+ const h = await B(t), p = await _(s, e);
233
239
  let i = r;
234
- Object.entries(p).forEach(([c, m]) => {
240
+ Object.entries(p).forEach(([c, D]) => {
235
241
  var E;
236
- if (m.isKeyframes || !m.generator) return;
237
- const $ = m.generator._withBuildContext({
242
+ if (D.isKeyframes || !D.generator) return;
243
+ const w = D.generator._withBuildContext({
238
244
  name: c,
239
245
  config: h
240
- }), S = new RegExp(`\\s${c}[=\\s]+[^()]+styled\\(([^,]+),`, "g").exec(r);
241
- if (!S) return console.error("Could not find the original declaration");
242
- const b = (E = S.at(1)) == null ? void 0 : E.trim(), w = new RegExp(`\\s${c}[=\\s]+styled\\(`, "g").exec(i);
243
- if (!w) return console.error("Could not find the original declaration");
244
- const { index: F } = w;
245
- let d = !1;
246
- const C = setTimeout(() => d = !0, 5e3);
247
- let f = 0, a = !1, u = 0;
248
- for (; !a && !d; ) {
249
- const P = i[F + f];
250
- P === "(" && u++, P === ")" && u--, u === 0 && P === ")" && (a = !0), f > i.length && (d = !0), f++;
246
+ }), a = new RegExp(`\\s${c}[=\\s]+[^()]+styled\\(([^,]+),`, "g").exec(r);
247
+ if (!a) return console.error("Could not find the original declaration");
248
+ const j = (E = a.at(1)) == null ? void 0 : E.trim(), C = new RegExp(`\\s${c}[=\\s]+styled\\(`, "g").exec(i);
249
+ if (!C) return console.error("Could not find the original declaration");
250
+ const { index: S } = C;
251
+ let y = !1;
252
+ const F = setTimeout(() => y = !0, 5e3);
253
+ let f = 0, l = !1, d = 0;
254
+ for (; !l && !y; ) {
255
+ const P = i[S + f];
256
+ P === "(" && d++, P === ")" && d--, d === 0 && P === ")" && (l = !0), f > i.length && (y = !0), f++;
251
257
  }
252
- if (!d) clearTimeout(C);
258
+ if (!y) clearTimeout(F);
253
259
  else throw new Error("Failed to find the end of the styled call and timed out");
254
- const l = F + f, j = i.slice(F, l), x = i, D = ` ${c} = styled(${b}, "${$.classNames}", "${$._callerName}", ${JSON.stringify($.props)});`;
255
- i = i.replace(j, D), x === i && console.error("Minimize file failed to change content", { name: c, tagName: b });
260
+ const g = S + f, $ = i.slice(S, g), b = i, x = ` ${c} = styled(${j}, "${w.classNames}", "${w._callerName}", ${JSON.stringify(w.props)});`;
261
+ i = i.replace($, x), b === i && console.error("Minimize file failed to change content", { name: c, tagName: j });
256
262
  });
257
- const o = M(s, 6);
263
+ const o = R(s, 6);
258
264
  return h.importStrategy === "component" && (i = `import '../../saltygen/css/${o}.css';
259
265
  ${i}`), i = i.replace("{ styled }", "{ styledClient as styled }"), i = i.replace("@salty-css/react/styled", "@salty-css/react/styled-client"), i;
260
266
  }
261
267
  } catch (e) {
262
268
  console.error("Error in minimizeFile:", e);
263
269
  }
264
- }, lt = (t) => ({
270
+ }, pt = (t) => ({
265
271
  name: "stylegen",
266
- buildStart: () => et(t),
272
+ buildStart: () => rt(t),
267
273
  load: async (s) => {
268
274
  if (V(s))
269
- return await rt(t, s);
275
+ return await it(t, s);
270
276
  },
271
277
  watchChange: {
272
278
  handler: async (s) => {
273
- V(s) && await nt(t, s), s.includes("salty.config") && await W(t);
279
+ V(s) && await ot(t, s), s.includes("salty.config") && await J(t);
274
280
  }
275
281
  }
276
282
  });
277
283
  export {
278
- lt as default,
279
- lt as saltyPlugin
284
+ pt as default,
285
+ pt as saltyPlugin
280
286
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salty-css/vite",
3
- "version": "0.0.1-alpha.50",
3
+ "version": "0.0.1-alpha.52",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.mjs",
6
6
  "typings": "./dist/index.d.ts",
@@ -29,6 +29,6 @@
29
29
  }
30
30
  },
31
31
  "dependencies": {
32
- "@salty-css/core": "^0.0.1-alpha.50"
32
+ "@salty-css/core": "^0.0.1-alpha.52"
33
33
  }
34
34
  }