@salty-css/vite 0.0.1-alpha.206 → 0.0.1-alpha.207
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.
- package/index.cjs +21 -21
- package/index.js +261 -258
- package/package.json +2 -2
package/index.cjs
CHANGED
@@ -1,40 +1,40 @@
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const kt=require("esbuild"),_t=require("child_process"),
|
2
|
-
`);if(!
|
3
|
-
`),
|
4
|
-
`)},zt=t=>t?Object.entries(t).reduce((e,[s,n])=>(typeof n=="function"?e[s]="any":typeof n=="object"&&(e[s]
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const kt=require("esbuild"),_t=require("child_process"),c=require("path"),d=require("fs"),tt=require("fs/promises"),B=require("winston");var rt=typeof document<"u"?document.currentScript:null;function Dt(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 gt=Dt(kt),pt=t=>String.fromCharCode(t+(t>25?39:97)),Ot=(t,e)=>{let s="",n;for(n=Math.abs(t);n>52;n=n/52|0)s=pt(n%52)+s;return s=pt(n%52)+s,s.length<e?s=s.padStart(e,"a"):s.length>e&&(s=s.slice(-e)),s},Tt=(t,e)=>{let s=e.length;for(;s;)t=t*33^e.charCodeAt(--s);return t},z=(t,e=5)=>{const s=Tt(5381,JSON.stringify(t))>>>0;return Ot(s,e)};function R(t){return t?typeof t!="string"?R(String(t)):t.replace(/[\s.]/g,"-").replace(/[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g,(e,s)=>(s>0?"-":"")+e.toLowerCase()):""}const Et=t=>e=>{if(typeof e!="string"||!t)return;let s=e;const n=[];return Object.values(t).forEach(o=>{const{pattern:r,transform:a}=o;s=s.replace(r,h=>{const{value:F,css:l}=a(h);return l&&n.push(l),F})}),{transformed:s,additionalCss:n}},ht=t=>e=>typeof e!="string"||!/\{[^{}]+\}/g.test(e)?void 0:{transformed:e.replace(/\{([^{}]+)\}/g,(...o)=>`var(--${R(o[1].replaceAll(".","-"))})`)},Mt=ht(),Rt=["top","right","bottom","left","min-width",/.*width.*/,/^[^line]*height.*/,/padding.*/,/margin.*/,/border.*/,/inset.*/,/.*radius.*/,/.*spacing.*/,/.*gap.*/,/.*indent.*/,/.*offset.*/,/.*size.*/,/.*thickness.*/,/.*font-size.*/],Vt=(t,e,s)=>Rt.some(o=>typeof o=="string"?o===t:o.test(t))?`${e}px`:`${e}`,Jt=["Webkit","Moz","ms","O"],vt=t=>t.startsWith("-")?t:Jt.some(e=>t.startsWith(e))?`-${R(t)}`:R(t),Y=async(t,e="",s,n=!1)=>{if(!t)throw new Error("No styles provided to parseStyles function!");const o=new Set,a=Object.entries(t).map(async([m,i])=>{const p=m.trim(),b=vt(p),C=(O,_=";")=>`${b}:${O}${_}`;if(typeof i=="function"&&(i=i({scope:e,config:s})),i instanceof Promise&&(i=await i),typeof i=="object"){if(!i)return;if(i.isColor)return C(i.toString());if(p==="defaultVariants")return;if(p==="variants"){const D=Object.entries(i);for(const[P,E]of D){if(!E)return;const f=Object.entries(E);for(const[w,g]of f){if(!g)return;const u=`${e}.${P}-${w}`;(await Y(g,u,s)).forEach(x=>o.add(x))}}return}if(p==="compoundVariants"){for(const D of i){const{css:P,...E}=D,f=Object.entries(E).reduce((g,[u,S])=>`${g}.${u}-${S}`,e);(await Y(P,f,s)).forEach(g=>o.add(g))}return}if(p.startsWith("@")){const D=p,P=await G(i,e,s),E=`${D} { ${P} }`;o.add(E);return}const O=m.includes("&")?p.replace("&",e):p.startsWith(":")?`${e}${p}`:`${e} ${p}`;(await Y(i,O,s)).forEach(D=>o.add(D));return}if(typeof i=="number"){const O=Vt(b,i);return C(O)}if(typeof i!="string")if("toString"in i)i=i.toString();else throw new Error(`Invalid value type for property ${b}`);return C(i)}),{modifiers:h}={},F=[ht(),Et(h)],y=(await Promise.all(a).then(m=>Promise.all(m.map(i=>F.reduce(async(p,b)=>{const C=await p;if(!C)return C;const k=await b(C);if(!k)return C;const{transformed:O,additionalCss:_}=k;let D="";if(_)for(const P of _)D+=await G(P,"");return`${D}${O}`},Promise.resolve(i)))))).join(`
|
2
|
+
`);if(!y.trim())return o;const $=e?`${e} { ${y} }`:y;return o.add($),o},G=async(t,e,s,n=!1)=>[...await Y(t,e,s,n)].join(`
|
3
|
+
`),wt=async(t,e=[])=>{if(!t)return"";const s=[],n={};for(const[o,r]of Object.entries(t))if(typeof r!="function")if(r&&typeof r=="object"){const a=o.trim(),h=await wt(r,[...e,a]);s.push(h)}else n[o]=r;if(Object.keys(n).length){const o=e.map(R).join("-"),r="t_"+z(o,4),a=await G(n,`.${o}, .${r}`);s.push(a)}return s.join(`
|
4
|
+
`)},zt=t=>t?Object.entries(t).reduce((e,[s,n])=>(typeof n=="function"?e[s]="any":typeof n=="object"&&(e[s]=$t(n).map(o=>`"${o}"`).join(" | ")),e),{}):{},$t=(t,e="",s=new Set)=>t?(Object.entries(t).forEach(([n,o])=>{const r=e?`${e}.${n}`:n;return typeof o=="object"?$t(o,r,s):s.add(e)}),[...s]):[],bt=t=>{if(!t||t==="/")throw new Error("Could not find package.json file");const e=c.join(t,"package.json");return d.existsSync(e)?e:bt(c.join(t,".."))},At=async t=>{const e=bt(t);return await tt.readFile(e,"utf-8").then(JSON.parse).catch(()=>{})},Wt=async t=>{const e=await At(t);if(e)return e.type};let I;const St=async t=>{if(I)return I;const e=await Wt(t);return e==="module"?I="esm":(e==="commonjs"||(typeof document>"u"?require("url").pathToFileURL(__filename).href:rt&&rt.tagName.toUpperCase()==="SCRIPT"&&rt.src||new URL("index.cjs",document.baseURI).href).endsWith(".cjs"))&&(I="cjs"),I||"esm"},it=B.createLogger({level:"debug",format:B.format.combine(B.format.colorize(),B.format.cli()),transports:[new B.transports.Console({})]});function jt(t){return t?typeof t!="string"?jt(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 It={"*, *::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"}},Z=(...t)=>t.flat().reduce((e,s)=>s!=null&&s._current?{...e,...s._current}:{...e,...s},{}),Zt=(...t)=>t.flat().reduce((e,s)=>({...e,...s._children}),{}),v={externalModules:[],rcFile:void 0,destDir:void 0},Ft=t=>{if(v.externalModules.length>0)return v.externalModules;const s=d.readFileSync(t,"utf8").match(/externalModules:\s?\[(.*)\]/);if(!s)return[];const n=s[1].split(",").map(o=>o.replace(/['"`]/g,"").trim());return v.externalModules=n,n},A=async t=>{if(v.destDir)return v.destDir;const e=await at(t),s=c.join(t,(e==null?void 0:e.saltygenDir)||"saltygen");return v.destDir=s,s},Ct=["salty","css","styles","styled"],qt=(t=[])=>new RegExp(`\\.(${[...Ct,...t].join("|")})\\.`),q=(t,e=[])=>qt(e).test(t),Nt=async t=>{if(v.rcFile)return v.rcFile;if(t==="/")throw new Error("Could not find .saltyrc.json file");const e=c.join(t,".saltyrc.json"),s=await tt.readFile(e,"utf-8").then(JSON.parse).catch(()=>{});return s?(v.rcFile=s,s):Nt(c.join(t,".."))},at=async t=>{var n,o;const e=await Nt(t),s=(n=e.projects)==null?void 0:n.find(r=>t.endsWith(r.dir||""));return s||((o=e.projects)==null?void 0:o.find(r=>r.dir===e.defaultProject))},Ht=async t=>{const e=await at(t),s=await A(t),n=c.join(t,(e==null?void 0:e.configDir)||"","salty.config.ts"),o=c.join(s,"salty.config.js"),r=await St(t),a=Ft(n);await gt.build({entryPoints:[n],minify:!0,treeShaking:!0,bundle:!0,outfile:o,format:r,external:a});const h=Date.now(),{config:F}=await import(`${o}?t=${h}`);return F},Lt=async(t,e)=>{var ft,ut;const s=await A(t),n={mediaQueries:[],globalStyles:[],variables:[],templates:[]};await Promise.all([...e].map(async j=>{const{contents:N,outputFilePath:J}=await et(t,j,s);Object.entries(N).forEach(([T,M])=>{M.isMedia?n.mediaQueries.push([T,M]):M.isGlobalDefine?n.globalStyles.push(M):M.isDefineVariables?n.variables.push(M):M.isDefineTemplates&&n.templates.push(M._setPath(J))})}));const o=await Ht(t),r={...o},a=new Set,h=(j,N=[])=>j?Object.entries(j).flatMap(([J,T])=>{if(!T)return;if(typeof T=="object")return h(T,[...N,J]);const M=jt(J),nt=R(J),ot=[...N,M].join(".");a.add(`"${ot}"`);const X=[...N.map(R),nt].join("-"),dt=Mt(T);return dt?`--${X}: ${dt.transformed};`:`--${X}: ${T};`}):[],F=j=>j?Object.entries(j).flatMap(([N,J])=>{const T=h(J);return N==="base"?T.join(""):`${N} { ${T.join("")} }`}):[],l=j=>j?Object.entries(j).flatMap(([N,J])=>Object.entries(J).flatMap(([T,M])=>{const nt=h(M,[N]),ot=`.${N}-${T}, [data-${N}="${T}"]`,X=nt.join("");return`${ot} { ${X} }`})):[],y=j=>({...j,responsive:void 0,conditional:void 0}),$=j=>n.variables.map(N=>j==="static"?y(N._current):N._current[j]),m=Z(y(o.variables),$("static")),i=h(m),p=Z((ft=o.variables)==null?void 0:ft.responsive,$("responsive")),b=F(p),C=Z((ut=o.variables)==null?void 0:ut.conditional,$("conditional")),k=l(C),O=c.join(s,"css/_variables.css"),_=`:root { ${i.join("")} ${b.join("")} } ${k.join("")}`;d.writeFileSync(O,_),r.staticVariables=m;const D=c.join(s,"css/_global.css"),P=Z(o.global,n.globalStyles),E=await G(P,"");d.writeFileSync(D,`@layer global { ${E} }`);const f=c.join(s,"css/_reset.css"),g=o.reset==="none"?{}:typeof o.reset=="object"?o.reset:It,u=await G(g,"");d.writeFileSync(f,`@layer reset { ${u} }`);const S=c.join(s,"css/_templates.css"),x=Z(o.templates,n.templates),V=await wt(x),H=zt(x);d.writeFileSync(S,`@layer templates { ${V} }`),r.templates=x;const L=Zt(n.templates);r.templatePaths=Object.fromEntries(Object.entries(L).map(([j,N])=>[j,N._path]));const{mediaQueries:W}=n;r.mediaQueries=Object.fromEntries(W.map(([j,N])=>[`@${j}`,N]));const K=W.map(([j])=>`'@${j}'`).join(" | "),st=c.join(s,"types/css-tokens.d.ts"),Q=`
|
5
5
|
// Variable types
|
6
|
-
type VariableTokens = ${[...
|
6
|
+
type VariableTokens = ${[...a].join("|")};
|
7
7
|
type PropertyValueToken = \`{\${VariableTokens}}\`;
|
8
8
|
|
9
9
|
// Template types
|
10
10
|
type TemplateTokens = {
|
11
|
-
${Object.entries(
|
11
|
+
${Object.entries(H).map(([j,N])=>`${j}?: ${N}`).join(`
|
12
12
|
`)}
|
13
13
|
}
|
14
14
|
|
15
15
|
// Media query types
|
16
16
|
type MediaQueryKeys = ${K||"''"};
|
17
|
-
`;d.writeFileSync(st,Q);const
|
17
|
+
`;d.writeFileSync(st,Q);const xt=c.join(s,"cache/config-cache.json");d.writeFileSync(xt,JSON.stringify(r,null,2))},yt=t=>t.replace(/styled\(([^"'`{,]+),/g,(e,s)=>{if(/^['"`]/.test(s))return e;const o=new RegExp(`import[^;]*${s}[,\\s{][^;]*from\\s?([^{};]+);`);if(!o.test(t))return e;const a=o.exec(t);if(a){const h=a.at(1);if(Ct.some(l=>h==null?void 0:h.includes(l)))return e}return"styled('div',"}),Bt=(t,e)=>{try{const s=d.readFileSync(c.join(e,"saltygen/cache/config-cache.json"),"utf8");return s?`globalThis.saltyConfig = ${s};
|
18
18
|
|
19
19
|
${t}`:`globalThis.saltyConfig = {};
|
20
20
|
|
21
|
-
${t}`}catch{return t}},et=async(t,e,s)=>{const n=z(e),o=
|
22
|
-
`),
|
21
|
+
${t}`}catch{return t}},et=async(t,e,s)=>{const n=z(e),o=c.join(s,"./temp");d.existsSync(o)||d.mkdirSync(o);const r=c.parse(e);let a=d.readFileSync(e,"utf8");a=yt(a),a=Bt(a,t);const h=c.join(s,"js",n+".js"),F=await at(t),l=c.join(t,(F==null?void 0:F.configDir)||"","salty.config.ts"),y=Ft(l),$=await St(t);await gt.build({stdin:{contents:a,sourcefile:r.base,resolveDir:r.dir,loader:"tsx"},minify:!1,treeShaking:!0,bundle:!0,outfile:h,format:$,target:["node20"],keepNames:!0,external:y,packages:"external",plugins:[{name:"test",setup:p=>{p.onLoad({filter:/.*\.css|salty|styles|styled\.ts/},b=>{const C=d.readFileSync(b.path,"utf8");return{contents:yt(C),loader:"ts"}})}}]});const m=Date.now();return{contents:await import(`${h}?t=${m}`),outputFilePath:h}},Gt=async t=>{const e=await A(t),s=c.join(e,"cache/config-cache.json"),n=d.readFileSync(s,"utf8");if(!n)throw new Error("Could not find config cache file");return JSON.parse(n)},ct=async t=>{const e=await Gt(t),s=await A(t),n=c.join(s,"salty.config.js"),o=Date.now(),{config:r}=await import(`${n}?t=${o}`);return Z(r,e)},lt=()=>{try{return process.env.NODE_ENV==="production"}catch{return!1}},Kt=async(t,e=lt(),s=!0)=>{try{const n=Date.now();e?it.info("Generating CSS in production mode! 🔥"):it.info("Generating CSS in development mode! 🚀");const o=[],r=[],a=await A(t),h=c.join(a,"index.css");s&&(()=>{d.existsSync(a)&&_t.execSync("rm -rf "+a),d.mkdirSync(a,{recursive:!0}),d.mkdirSync(c.join(a,"css")),d.mkdirSync(c.join(a,"types")),d.mkdirSync(c.join(a,"js")),d.mkdirSync(c.join(a,"cache"))})();const l=new Set,y=new Set;async function $(f){const w=["node_modules","saltygen"],g=d.statSync(f);if(g.isDirectory()){const u=d.readdirSync(f);if(w.some(x=>f.includes(x)))return;await Promise.all(u.map(x=>$(c.join(f,x))))}else if(g.isFile()&&q(f)){l.add(f);const S=d.readFileSync(f,"utf8");/define[\w\d]+\(/.test(S)&&y.add(f)}}await $(t),await Lt(t,y);const m={keyframes:[],components:[],classNames:[]};await Promise.all([...l].map(async f=>{const{contents:w}=await et(t,f,a);Object.entries(w).forEach(([g,u])=>{u.isKeyframes?m.keyframes.push({value:u,src:f,name:g}):u.isClassName?m.classNames.push({...u,src:f,name:g}):u.generator&&m.components.push({...u,src:f,name:g})})}));const i=await ct(t);for(const f of m.keyframes){const{value:w}=f,g=`a_${w.animationName}.css`,u=`css/${g}`,S=c.join(a,u);o.push(g),d.writeFileSync(S,w.css)}const p={};for(const f of m.components){const{src:w,name:g}=f,u=f.generator._withBuildContext({callerName:g,isProduction:e,config:i});r[u.priority]||(r[u.priority]=[]);const S=await u.css;if(!S)continue;r[u.priority].push(u.cssFileName);const x=`css/${u.cssFileName}`,V=c.join(a,x);d.writeFileSync(V,S),i.importStrategy==="component"&&(p[w]?p[w].push(u.cssFileName):p[w]=[u.cssFileName])}for(const f of m.classNames){const{src:w,name:g}=f,u=f.generator._withBuildContext({callerName:g,isProduction:e,config:i}),S=await u.css;if(!S)continue;r[0].push(u.cssFileName);const x=`css/${u.cssFileName}`,V=c.join(a,x);d.writeFileSync(V,S),i.importStrategy==="component"&&(p[w]?p[w].push(u.cssFileName):p[w]=[u.cssFileName])}i.importStrategy==="component"&&Object.entries(p).forEach(([f,w])=>{const g=w.map(H=>`@import url('./${H}');`).join(`
|
22
|
+
`),u=z(f,6),S=c.parse(f),x=R(S.name),V=c.join(a,`css/f_${x}-${u}.css`);d.writeFileSync(V,g)});const b=o.map(f=>`@import url('./css/${f}');`).join(`
|
23
23
|
`);let _=`@layer reset, global, templates, l0, l1, l2, l3, l4, l5, l6, l7, l8;
|
24
24
|
|
25
|
-
${["_variables.css","_reset.css","_global.css","_templates.css"].filter(
|
25
|
+
${["_variables.css","_reset.css","_global.css","_templates.css"].filter(f=>{try{return d.readFileSync(c.join(a,"css",f),"utf8").length>0}catch{return!1}}).map(f=>`@import url('./css/${f}');`).join(`
|
26
26
|
`)}
|
27
|
-
${
|
28
|
-
/*start:${U}*/
|
27
|
+
${b}`;if(i.importStrategy!=="component"){const f=r.reduce((w,g,u)=>{const S=g.reduce((L,W)=>{var Q;const K=c.join(a,"css",W),st=d.readFileSync(K,"utf8"),U=((Q=/.*-([^-]+)-\d+.css/.exec(W))==null?void 0:Q.at(1))||z(K,6);return L.includes(U)?L:`${L}
|
28
|
+
/*start:${U}-${W}*/
|
29
29
|
${st}
|
30
30
|
/*end:${U}*/
|
31
|
-
`},""),
|
32
|
-
}`;return d.writeFileSync(V,
|
33
|
-
@import url('./css/${
|
34
|
-
${D}
|
35
|
-
/*end:${p}*/
|
36
|
-
`;b=`${b.replace(/\}$/,"")}
|
31
|
+
`},""),x=`l_${u}.css`,V=c.join(a,"css",x),H=`@layer l${u} { ${S}
|
32
|
+
}`;return d.writeFileSync(V,H),`${w}
|
33
|
+
@import url('./css/${x}');`},"");_+=f}d.writeFileSync(h,_);const P=Date.now()-n,E=P<200?"🔥":P<500?"🚀":P<1e3?"🎉":P<2e3?"🚗":P<5e3?"🤔":"🥴";it.info(`Generated CSS in ${P}ms! ${E}`)}catch(n){console.error(n)}},Ut=async(t,e,s=lt())=>{try{const n=await A(t);if(q(e)){const r=[],a=await ct(t),{contents:h}=await et(t,e,n);for(const[F,l]of Object.entries(h)){if(l.isKeyframes&&l.css){const b=`css/${`a_${l.animationName}.css`}`,C=c.join(n,b);d.writeFileSync(C,await l.css);return}if(l.isClassName){const p=l.generator._withBuildContext({callerName:F,isProduction:s,config:a}),b=await p.css;if(!b)continue;r[0].push(p.cssFileName);const C=`css/${p.cssFileName}`,k=c.join(n,C);d.writeFileSync(k,b)}if(!l.generator)return;const y=l.generator._withBuildContext({callerName:F,isProduction:s,config:a}),$=await y.css;if(!$)continue;const m=`css/${y.cssFileName}`,i=c.join(n,m);d.writeFileSync(i,$),r[y.priority]||(r[y.priority]=[]),r[y.priority].push(y.cssFileName)}if(a.importStrategy!=="component")r.forEach((F,l)=>{const y=`l_${l}.css`,$=c.join(n,"css",y);let m=d.readFileSync($,"utf8");F.forEach(i=>{var k;const p=c.join(n,"css",i),b=((k=/.*-([^-]+)-\d+.css/.exec(i))==null?void 0:k.at(1))||z(p,6);if(!m.includes(b)){const O=d.readFileSync(p,"utf8"),_=`/*start:${b}-${i}*/
|
37
34
|
${O}
|
38
|
-
|
39
|
-
|
40
|
-
${
|
35
|
+
/*end:${b}*/
|
36
|
+
`;m=`${m.replace(/\}$/,"")}
|
37
|
+
${_}
|
38
|
+
}`}}),d.writeFileSync($,m)});else{const F=r.flat().map(i=>`@import url('./${i}');`).join(`
|
39
|
+
`),l=z(e,6),y=c.parse(e),$=R(y.name),m=c.join(n,`css/f_${$}-${l}.css`);d.writeFileSync(m,F)}}}catch(n){console.error(n)}},Qt=async(t,e,s=lt())=>{try{const n=await A(t);if(q(e)){const r=d.readFileSync(e,"utf8");r.replace(/^(?!export\s)const\s.*/gm,y=>`export ${y}`)!==r&&await tt.writeFile(e,r);const h=await ct(t),{contents:F}=await et(t,e,n);let l=r;if(Object.entries(F).forEach(([y,$])=>{var u;if($.isKeyframes||!$.generator)return;const m=$.generator._withBuildContext({callerName:y,isProduction:s,config:h}),i=new RegExp(`\\s${y}[=\\s]+[^()]+styled\\(([^,]+),`,"g").exec(r);if(!i)return console.error("Could not find the original declaration");const p=(u=i.at(1))==null?void 0:u.trim(),b=new RegExp(`\\s${y}[=\\s]+styled\\(`,"g").exec(l);if(!b)return console.error("Could not find the original declaration");const{index:C}=b;let k=!1;const O=setTimeout(()=>k=!0,5e3);let _=0,D=!1,P=0;for(;!D&&!k;){const S=l[C+_];S==="("&&P++,S===")"&&P--,P===0&&S===")"&&(D=!0),_>l.length&&(k=!0),_++}if(!k)clearTimeout(O);else throw new Error("Failed to find the end of the styled call and timed out");const E=C+_,f=l.slice(C,E),w=l,g=` ${y} = styled(${p}, "${m.classNames}", ${JSON.stringify(m.clientProps)});`;l=l.replace(f,g),w===l&&console.error("Minimize file failed to change content",{name:y,tagName:p})}),h.importStrategy==="component"){const y=z(e,6),$=c.parse(e);l=`import '../../saltygen/css/${`f_${R($.name)}-${y}.css`}';
|
40
|
+
${l}`}return l=l.replace("{ styled }","{ styledClient as styled }"),l=l.replace("@salty-css/react/styled","@salty-css/react/styled-client"),l}}catch(n){console.error("Error in minimizeFile:",n)}},mt=async t=>{if(!t||t.includes("node_modules")||t.includes("saltygen"))return!1;if(t.includes("salty.config"))return!0;if(!q(t))return!1;const n=await tt.readFile(t,"utf-8");return!!/.+define[A-Z]\w+/.test(n)},Pt=t=>({name:"stylegen",buildStart:()=>Kt(t),load:async e=>{if(q(e))return await Qt(t,e)},handleHotUpdate:async({file:e,server:s})=>{await mt(e)&&await s.restart()},watchChange:{handler:async e=>{q(e)&&(await mt(e)||await Ut(t,e))}}});exports.default=Pt;exports.saltyPlugin=Pt;
|
package/index.js
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
import * as
|
1
|
+
import * as wt from "esbuild";
|
2
2
|
import { execSync as _t } from "child_process";
|
3
3
|
import { join as u, parse as et } from "path";
|
4
|
-
import { existsSync as ct, mkdirSync as
|
4
|
+
import { existsSync as ct, mkdirSync as I, statSync as Et, readdirSync as Tt, readFileSync as M, writeFileSync as D } from "fs";
|
5
5
|
import { readFile as lt, writeFile as Ot } from "fs/promises";
|
6
6
|
import { createLogger as Vt, format as it, transports as Mt } from "winston";
|
7
|
-
const
|
7
|
+
const ht = (t) => String.fromCharCode(t + (t > 25 ? 39 : 97)), Rt = (t, e) => {
|
8
8
|
let s = "", n;
|
9
|
-
for (n = Math.abs(t); n > 52; n = n / 52 | 0) s =
|
10
|
-
return s =
|
9
|
+
for (n = Math.abs(t); n > 52; n = n / 52 | 0) s = ht(n % 52) + s;
|
10
|
+
return s = ht(n % 52) + s, s.length < e ? s = s.padStart(e, "a") : s.length > e && (s = s.slice(-e)), s;
|
11
11
|
}, Jt = (t, e) => {
|
12
12
|
let s = e.length;
|
13
13
|
for (; s; ) t = t * 33 ^ e.charCodeAt(--s);
|
@@ -25,12 +25,12 @@ const At = (t) => (e) => {
|
|
25
25
|
const n = [];
|
26
26
|
return Object.values(t).forEach((o) => {
|
27
27
|
const { pattern: r, transform: a } = o;
|
28
|
-
s = s.replace(r, (
|
29
|
-
const { value:
|
30
|
-
return
|
28
|
+
s = s.replace(r, (h) => {
|
29
|
+
const { value: S, css: c } = a(h);
|
30
|
+
return c && n.push(c), S;
|
31
31
|
});
|
32
32
|
}), { transformed: s, additionalCss: n };
|
33
|
-
},
|
33
|
+
}, bt = (t) => (e) => typeof e != "string" || !/\{[^{}]+\}/g.test(e) ? void 0 : { transformed: e.replace(/\{([^{}]+)\}/g, (...o) => `var(--${R(o[1].replaceAll(".", "-"))})`) }, Wt = bt(), zt = [
|
34
34
|
"top",
|
35
35
|
"right",
|
36
36
|
"bottom",
|
@@ -53,75 +53,75 @@ const At = (t) => (e) => {
|
|
53
53
|
/.*font-size.*/
|
54
54
|
], vt = (t, e, s) => zt.some((o) => typeof o == "string" ? o === t : o.test(t)) ? `${e}px` : `${e}`, Zt = ["Webkit", "Moz", "ms", "O"], Ht = (t) => t.startsWith("-") ? t : Zt.some((e) => t.startsWith(e)) ? `-${R(t)}` : R(t), tt = async (t, e = "", s, n = !1) => {
|
55
55
|
if (!t) throw new Error("No styles provided to parseStyles function!");
|
56
|
-
const o = /* @__PURE__ */ new Set(), a = Object.entries(t).map(async ([
|
57
|
-
const d =
|
56
|
+
const o = /* @__PURE__ */ new Set(), a = Object.entries(t).map(async ([m, i]) => {
|
57
|
+
const d = m.trim(), w = Ht(d), j = (E, k = ";") => `${w}:${E}${k}`;
|
58
58
|
if (typeof i == "function" && (i = i({ scope: e, config: s })), i instanceof Promise && (i = await i), typeof i == "object") {
|
59
59
|
if (!i) return;
|
60
|
-
if (i.isColor) return
|
60
|
+
if (i.isColor) return j(i.toString());
|
61
61
|
if (d === "defaultVariants") return;
|
62
62
|
if (d === "variants") {
|
63
|
-
const
|
64
|
-
for (const [
|
63
|
+
const _ = Object.entries(i);
|
64
|
+
for (const [N, O] of _) {
|
65
65
|
if (!O) return;
|
66
|
-
const
|
67
|
-
for (const [
|
68
|
-
if (!
|
69
|
-
const
|
70
|
-
(await tt(
|
66
|
+
const l = Object.entries(O);
|
67
|
+
for (const [y, g] of l) {
|
68
|
+
if (!g) return;
|
69
|
+
const f = `${e}.${N}-${y}`;
|
70
|
+
(await tt(g, f, s)).forEach((x) => o.add(x));
|
71
71
|
}
|
72
72
|
}
|
73
73
|
return;
|
74
74
|
}
|
75
75
|
if (d === "compoundVariants") {
|
76
|
-
for (const
|
77
|
-
const { css:
|
78
|
-
(await tt(
|
76
|
+
for (const _ of i) {
|
77
|
+
const { css: N, ...O } = _, l = Object.entries(O).reduce((g, [f, b]) => `${g}.${f}-${b}`, e);
|
78
|
+
(await tt(N, l, s)).forEach((g) => o.add(g));
|
79
79
|
}
|
80
80
|
return;
|
81
81
|
}
|
82
82
|
if (d.startsWith("@")) {
|
83
|
-
const
|
83
|
+
const _ = d, N = await Q(i, e, s), O = `${_} { ${N} }`;
|
84
84
|
o.add(O);
|
85
85
|
return;
|
86
86
|
}
|
87
|
-
const E =
|
88
|
-
(await tt(i, E, s)).forEach((
|
87
|
+
const E = m.includes("&") ? d.replace("&", e) : d.startsWith(":") ? `${e}${d}` : `${e} ${d}`;
|
88
|
+
(await tt(i, E, s)).forEach((_) => o.add(_));
|
89
89
|
return;
|
90
90
|
}
|
91
91
|
if (typeof i == "number") {
|
92
|
-
const E = vt(
|
93
|
-
return
|
92
|
+
const E = vt(w, i);
|
93
|
+
return j(E);
|
94
94
|
}
|
95
95
|
if (typeof i != "string")
|
96
96
|
if ("toString" in i) i = i.toString();
|
97
|
-
else throw new Error(`Invalid value type for property ${
|
98
|
-
return
|
99
|
-
}), { modifiers:
|
100
|
-
|
101
|
-
const
|
102
|
-
if (!
|
103
|
-
const
|
104
|
-
if (!
|
105
|
-
const { transformed: E, additionalCss:
|
106
|
-
let
|
107
|
-
if (
|
108
|
-
for (const
|
109
|
-
|
110
|
-
return `${
|
97
|
+
else throw new Error(`Invalid value type for property ${w}`);
|
98
|
+
return j(i);
|
99
|
+
}), { modifiers: h } = {}, S = [bt(), At(h)], p = (await Promise.all(a).then((m) => Promise.all(
|
100
|
+
m.map((i) => S.reduce(async (d, w) => {
|
101
|
+
const j = await d;
|
102
|
+
if (!j) return j;
|
103
|
+
const P = await w(j);
|
104
|
+
if (!P) return j;
|
105
|
+
const { transformed: E, additionalCss: k } = P;
|
106
|
+
let _ = "";
|
107
|
+
if (k)
|
108
|
+
for (const N of k)
|
109
|
+
_ += await Q(N, "");
|
110
|
+
return `${_}${E}`;
|
111
111
|
}, Promise.resolve(i)))
|
112
112
|
))).join(`
|
113
113
|
`);
|
114
|
-
if (!
|
115
|
-
const $ = e ? `${e} { ${
|
114
|
+
if (!p.trim()) return o;
|
115
|
+
const $ = e ? `${e} { ${p} }` : p;
|
116
116
|
return o.add($), o;
|
117
117
|
}, Q = async (t, e, s, n = !1) => [...await tt(t, e, s, n)].join(`
|
118
|
-
`),
|
118
|
+
`), Ct = async (t, e = []) => {
|
119
119
|
if (!t) return "";
|
120
120
|
const s = [], n = {};
|
121
121
|
for (const [o, r] of Object.entries(t))
|
122
122
|
if (typeof r != "function") if (r && typeof r == "object") {
|
123
|
-
const a = o.trim(),
|
124
|
-
s.push(
|
123
|
+
const a = o.trim(), h = await Ct(r, [...e, a]);
|
124
|
+
s.push(h);
|
125
125
|
} else
|
126
126
|
n[o] = r;
|
127
127
|
if (Object.keys(n).length) {
|
@@ -130,15 +130,15 @@ const At = (t) => (e) => {
|
|
130
130
|
}
|
131
131
|
return s.join(`
|
132
132
|
`);
|
133
|
-
}, It = (t) => t ? Object.entries(t).reduce((e, [s, n]) => (typeof n == "function" ? e[s] = "any" : typeof n == "object" && (e[s] =
|
133
|
+
}, It = (t) => t ? Object.entries(t).reduce((e, [s, n]) => (typeof n == "function" ? e[s] = "any" : typeof n == "object" && (e[s] = St(n).map((o) => `"${o}"`).join(" | ")), e), {}) : {}, St = (t, e = "", s = /* @__PURE__ */ new Set()) => t ? (Object.entries(t).forEach(([n, o]) => {
|
134
134
|
const r = e ? `${e}.${n}` : n;
|
135
|
-
return typeof o == "object" ?
|
136
|
-
}), [...s]) : [],
|
135
|
+
return typeof o == "object" ? St(o, r, s) : s.add(e);
|
136
|
+
}), [...s]) : [], jt = (t) => {
|
137
137
|
if (!t || t === "/") throw new Error("Could not find package.json file");
|
138
138
|
const e = u(t, "package.json");
|
139
|
-
return ct(e) ? e :
|
139
|
+
return ct(e) ? e : jt(u(t, ".."));
|
140
140
|
}, Bt = async (t) => {
|
141
|
-
const e =
|
141
|
+
const e = jt(t);
|
142
142
|
return await lt(e, "utf-8").then(JSON.parse).catch(() => {
|
143
143
|
});
|
144
144
|
}, Gt = async (t) => {
|
@@ -146,18 +146,18 @@ const At = (t) => (e) => {
|
|
146
146
|
if (e)
|
147
147
|
return e.type;
|
148
148
|
};
|
149
|
-
let
|
150
|
-
const
|
151
|
-
if (
|
149
|
+
let H;
|
150
|
+
const Ft = async (t) => {
|
151
|
+
if (H) return H;
|
152
152
|
const e = await Gt(t);
|
153
|
-
return e === "module" ?
|
153
|
+
return e === "module" ? H = "esm" : (e === "commonjs" || import.meta.url.endsWith(".cjs")) && (H = "cjs"), H || "esm";
|
154
154
|
}, at = Vt({
|
155
155
|
level: "debug",
|
156
156
|
format: it.combine(it.colorize(), it.cli()),
|
157
157
|
transports: [new Mt.Console({})]
|
158
158
|
});
|
159
|
-
function
|
160
|
-
return t ? typeof t != "string" ?
|
159
|
+
function Nt(t) {
|
160
|
+
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()) : "";
|
161
161
|
}
|
162
162
|
const Kt = {
|
163
163
|
/** Set box model to border-box */
|
@@ -205,7 +205,7 @@ const Kt = {
|
|
205
205
|
fontSize: "100%",
|
206
206
|
lineHeight: "1.15em"
|
207
207
|
}
|
208
|
-
},
|
208
|
+
}, B = (...t) => t.flat().reduce((e, s) => s != null && s._current ? { ...e, ...s._current } : { ...e, ...s }, {}), Lt = (...t) => t.flat().reduce((e, s) => ({ ...e, ...s._children }), {}), W = {
|
209
209
|
externalModules: [],
|
210
210
|
rcFile: void 0,
|
211
211
|
destDir: void 0
|
@@ -219,19 +219,19 @@ const Kt = {
|
|
219
219
|
if (W.destDir) return W.destDir;
|
220
220
|
const e = await ft(t), s = u(t, (e == null ? void 0 : e.saltygenDir) || "saltygen");
|
221
221
|
return W.destDir = s, s;
|
222
|
-
},
|
222
|
+
}, Pt = ["salty", "css", "styles", "styled"], Qt = (t = []) => new RegExp(`\\.(${[...Pt, ...t].join("|")})\\.`), G = (t, e = []) => Qt(e).test(t), kt = async (t) => {
|
223
223
|
if (W.rcFile) return W.rcFile;
|
224
224
|
if (t === "/") throw new Error("Could not find .saltyrc.json file");
|
225
225
|
const e = u(t, ".saltyrc.json"), s = await lt(e, "utf-8").then(JSON.parse).catch(() => {
|
226
226
|
});
|
227
|
-
return s ? (W.rcFile = s, s) :
|
227
|
+
return s ? (W.rcFile = s, s) : kt(u(t, ".."));
|
228
228
|
}, ft = async (t) => {
|
229
229
|
var n, o;
|
230
|
-
const e = await
|
230
|
+
const e = await kt(t), s = (n = e.projects) == null ? void 0 : n.find((r) => t.endsWith(r.dir || ""));
|
231
231
|
return s || ((o = e.projects) == null ? void 0 : o.find((r) => r.dir === e.defaultProject));
|
232
232
|
}, Ut = async (t) => {
|
233
|
-
const e = await ft(t), s = await v(t), n = u(t, (e == null ? void 0 : e.configDir) || "", "salty.config.ts"), o = u(s, "salty.config.js"), r = await
|
234
|
-
await
|
233
|
+
const e = await ft(t), s = await v(t), n = u(t, (e == null ? void 0 : e.configDir) || "", "salty.config.ts"), o = u(s, "salty.config.js"), r = await Ft(t), a = xt(n);
|
234
|
+
await wt.build({
|
235
235
|
entryPoints: [n],
|
236
236
|
minify: !0,
|
237
237
|
treeShaking: !0,
|
@@ -240,10 +240,10 @@ const Kt = {
|
|
240
240
|
format: r,
|
241
241
|
external: a
|
242
242
|
});
|
243
|
-
const
|
244
|
-
return
|
243
|
+
const h = Date.now(), { config: S } = await import(`${o}?t=${h}`);
|
244
|
+
return S;
|
245
245
|
}, qt = async (t, e) => {
|
246
|
-
var
|
246
|
+
var pt, mt;
|
247
247
|
const s = await v(t), n = {
|
248
248
|
mediaQueries: [],
|
249
249
|
globalStyles: [],
|
@@ -252,62 +252,62 @@ const Kt = {
|
|
252
252
|
};
|
253
253
|
await Promise.all(
|
254
254
|
[...e].map(async (C) => {
|
255
|
-
const { contents:
|
256
|
-
Object.entries(
|
255
|
+
const { contents: F, outputFilePath: A } = await st(t, C, s);
|
256
|
+
Object.entries(F).forEach(([T, V]) => {
|
257
257
|
V.isMedia ? n.mediaQueries.push([T, V]) : V.isGlobalDefine ? n.globalStyles.push(V) : V.isDefineVariables ? n.variables.push(V) : V.isDefineTemplates && n.templates.push(V._setPath(A));
|
258
258
|
});
|
259
259
|
})
|
260
260
|
);
|
261
|
-
const o = await Ut(t), r = { ...o }, a = /* @__PURE__ */ new Set(),
|
261
|
+
const o = await Ut(t), r = { ...o }, a = /* @__PURE__ */ new Set(), h = (C, F = []) => C ? Object.entries(C).flatMap(([A, T]) => {
|
262
262
|
if (!T) return;
|
263
|
-
if (typeof T == "object") return
|
264
|
-
const V =
|
263
|
+
if (typeof T == "object") return h(T, [...F, A]);
|
264
|
+
const V = Nt(A), ot = R(A), rt = [...F, V].join(".");
|
265
265
|
a.add(`"${rt}"`);
|
266
|
-
const Y = [...
|
267
|
-
return
|
268
|
-
}) : [],
|
269
|
-
const T =
|
270
|
-
return
|
271
|
-
}) : [],
|
272
|
-
const ot =
|
266
|
+
const Y = [...F.map(R), ot].join("-"), gt = Wt(T);
|
267
|
+
return gt ? `--${Y}: ${gt.transformed};` : `--${Y}: ${T};`;
|
268
|
+
}) : [], S = (C) => C ? Object.entries(C).flatMap(([F, A]) => {
|
269
|
+
const T = h(A);
|
270
|
+
return F === "base" ? T.join("") : `${F} { ${T.join("")} }`;
|
271
|
+
}) : [], c = (C) => C ? Object.entries(C).flatMap(([F, A]) => Object.entries(A).flatMap(([T, V]) => {
|
272
|
+
const ot = h(V, [F]), rt = `.${F}-${T}, [data-${F}="${T}"]`, Y = ot.join("");
|
273
273
|
return `${rt} { ${Y} }`;
|
274
|
-
})) : [],
|
275
|
-
|
276
|
-
const
|
277
|
-
|
278
|
-
const
|
279
|
-
|
280
|
-
const b = u(s, "css/_templates.css"),
|
281
|
-
|
282
|
-
const
|
283
|
-
r.templatePaths = Object.fromEntries(Object.entries(
|
284
|
-
const { mediaQueries:
|
285
|
-
r.mediaQueries = Object.fromEntries(
|
286
|
-
const U =
|
274
|
+
})) : [], p = (C) => ({ ...C, responsive: void 0, conditional: void 0 }), $ = (C) => n.variables.map((F) => C === "static" ? p(F._current) : F._current[C]), m = B(p(o.variables), $("static")), i = h(m), d = B((pt = o.variables) == null ? void 0 : pt.responsive, $("responsive")), w = S(d), j = B((mt = o.variables) == null ? void 0 : mt.conditional, $("conditional")), P = c(j), E = u(s, "css/_variables.css"), k = `:root { ${i.join("")} ${w.join("")} } ${P.join("")}`;
|
275
|
+
D(E, k), r.staticVariables = m;
|
276
|
+
const _ = u(s, "css/_global.css"), N = B(o.global, n.globalStyles), O = await Q(N, "");
|
277
|
+
D(_, `@layer global { ${O} }`);
|
278
|
+
const l = u(s, "css/_reset.css"), g = o.reset === "none" ? {} : typeof o.reset == "object" ? o.reset : Kt, f = await Q(g, "");
|
279
|
+
D(l, `@layer reset { ${f} }`);
|
280
|
+
const b = u(s, "css/_templates.css"), x = B(o.templates, n.templates), J = await Ct(x), K = It(x);
|
281
|
+
D(b, `@layer templates { ${J} }`), r.templates = x;
|
282
|
+
const L = Lt(n.templates);
|
283
|
+
r.templatePaths = Object.fromEntries(Object.entries(L).map(([C, F]) => [C, F._path]));
|
284
|
+
const { mediaQueries: Z } = n;
|
285
|
+
r.mediaQueries = Object.fromEntries(Z.map(([C, F]) => [`@${C}`, F]));
|
286
|
+
const U = Z.map(([C]) => `'@${C}'`).join(" | "), nt = u(s, "types/css-tokens.d.ts"), X = `
|
287
287
|
// Variable types
|
288
288
|
type VariableTokens = ${[...a].join("|")};
|
289
289
|
type PropertyValueToken = \`{\${VariableTokens}}\`;
|
290
290
|
|
291
291
|
// Template types
|
292
292
|
type TemplateTokens = {
|
293
|
-
${Object.entries(
|
293
|
+
${Object.entries(K).map(([C, F]) => `${C}?: ${F}`).join(`
|
294
294
|
`)}
|
295
295
|
}
|
296
296
|
|
297
297
|
// Media query types
|
298
298
|
type MediaQueryKeys = ${U || "''"};
|
299
299
|
`;
|
300
|
-
|
300
|
+
D(nt, X);
|
301
301
|
const Dt = u(s, "cache/config-cache.json");
|
302
|
-
|
303
|
-
},
|
302
|
+
D(Dt, JSON.stringify(r, null, 2));
|
303
|
+
}, yt = (t) => t.replace(/styled\(([^"'`{,]+),/g, (e, s) => {
|
304
304
|
if (/^['"`]/.test(s)) return e;
|
305
305
|
const o = new RegExp(`import[^;]*${s}[,\\s{][^;]*from\\s?([^{};]+);`);
|
306
306
|
if (!o.test(t)) return e;
|
307
307
|
const a = o.exec(t);
|
308
308
|
if (a) {
|
309
|
-
const
|
310
|
-
if (
|
309
|
+
const h = a.at(1);
|
310
|
+
if (Pt.some((c) => h == null ? void 0 : h.includes(c))) return e;
|
311
311
|
}
|
312
312
|
return "styled('div',";
|
313
313
|
}), Xt = (t, e) => {
|
@@ -323,12 +323,12 @@ ${t}`;
|
|
323
323
|
}
|
324
324
|
}, st = async (t, e, s) => {
|
325
325
|
const n = z(e), o = u(s, "./temp");
|
326
|
-
ct(o) ||
|
326
|
+
ct(o) || I(o);
|
327
327
|
const r = et(e);
|
328
328
|
let a = M(e, "utf8");
|
329
|
-
a =
|
330
|
-
const
|
331
|
-
await
|
329
|
+
a = yt(a), a = Xt(a, t);
|
330
|
+
const h = u(s, "js", n + ".js"), S = await ft(t), c = u(t, (S == null ? void 0 : S.configDir) || "", "salty.config.ts"), p = xt(c), $ = await Ft(t);
|
331
|
+
await wt.build({
|
332
332
|
stdin: {
|
333
333
|
contents: a,
|
334
334
|
sourcefile: r.base,
|
@@ -338,273 +338,276 @@ ${t}`;
|
|
338
338
|
minify: !1,
|
339
339
|
treeShaking: !0,
|
340
340
|
bundle: !0,
|
341
|
-
outfile:
|
341
|
+
outfile: h,
|
342
342
|
format: $,
|
343
343
|
target: ["node20"],
|
344
344
|
keepNames: !0,
|
345
|
-
external:
|
345
|
+
external: p,
|
346
346
|
packages: "external",
|
347
347
|
plugins: [
|
348
348
|
{
|
349
349
|
name: "test",
|
350
350
|
setup: (d) => {
|
351
|
-
d.onLoad({ filter: /.*\.css|salty|styles|styled\.ts/ }, (
|
352
|
-
const
|
353
|
-
return { contents:
|
351
|
+
d.onLoad({ filter: /.*\.css|salty|styles|styled\.ts/ }, (w) => {
|
352
|
+
const j = M(w.path, "utf8");
|
353
|
+
return { contents: yt(j), loader: "ts" };
|
354
354
|
});
|
355
355
|
}
|
356
356
|
}
|
357
357
|
]
|
358
358
|
});
|
359
|
-
const
|
360
|
-
return { contents: await import(`${
|
359
|
+
const m = Date.now();
|
360
|
+
return { contents: await import(`${h}?t=${m}`), outputFilePath: h };
|
361
361
|
}, Yt = async (t) => {
|
362
362
|
const e = await v(t), s = u(e, "cache/config-cache.json"), n = M(s, "utf8");
|
363
363
|
if (!n) throw new Error("Could not find config cache file");
|
364
364
|
return JSON.parse(n);
|
365
365
|
}, ut = async (t) => {
|
366
366
|
const e = await Yt(t), s = await v(t), n = u(s, "salty.config.js"), o = Date.now(), { config: r } = await import(`${n}?t=${o}`);
|
367
|
-
return
|
368
|
-
},
|
367
|
+
return B(r, e);
|
368
|
+
}, dt = () => {
|
369
369
|
try {
|
370
370
|
return process.env.NODE_ENV === "production";
|
371
371
|
} catch {
|
372
372
|
return !1;
|
373
373
|
}
|
374
|
-
}, te = async (t, e =
|
374
|
+
}, te = async (t, e = dt(), s = !0) => {
|
375
375
|
try {
|
376
376
|
const n = Date.now();
|
377
377
|
e ? at.info("Generating CSS in production mode! 🔥") : at.info("Generating CSS in development mode! 🚀");
|
378
|
-
const o = [], r = [], a = await v(t),
|
378
|
+
const o = [], r = [], a = await v(t), h = u(a, "index.css");
|
379
379
|
s && (() => {
|
380
|
-
ct(a) && _t("rm -rf " + a),
|
380
|
+
ct(a) && _t("rm -rf " + a), I(a, { recursive: !0 }), I(u(a, "css")), I(u(a, "types")), I(u(a, "js")), I(u(a, "cache"));
|
381
381
|
})();
|
382
|
-
const
|
383
|
-
async function $(
|
384
|
-
const
|
385
|
-
if (
|
386
|
-
const
|
387
|
-
if (
|
388
|
-
await Promise.all(
|
389
|
-
} else if (
|
390
|
-
|
391
|
-
const b = M(
|
392
|
-
/define[\w\d]+\(/.test(b) &&
|
382
|
+
const c = /* @__PURE__ */ new Set(), p = /* @__PURE__ */ new Set();
|
383
|
+
async function $(l) {
|
384
|
+
const y = ["node_modules", "saltygen"], g = Et(l);
|
385
|
+
if (g.isDirectory()) {
|
386
|
+
const f = Tt(l);
|
387
|
+
if (y.some((x) => l.includes(x))) return;
|
388
|
+
await Promise.all(f.map((x) => $(u(l, x))));
|
389
|
+
} else if (g.isFile() && G(l)) {
|
390
|
+
c.add(l);
|
391
|
+
const b = M(l, "utf8");
|
392
|
+
/define[\w\d]+\(/.test(b) && p.add(l);
|
393
393
|
}
|
394
394
|
}
|
395
|
-
await $(t), await qt(t,
|
396
|
-
const
|
395
|
+
await $(t), await qt(t, p);
|
396
|
+
const m = {
|
397
397
|
keyframes: [],
|
398
398
|
components: [],
|
399
399
|
classNames: []
|
400
400
|
};
|
401
401
|
await Promise.all(
|
402
|
-
[...
|
403
|
-
const { contents:
|
404
|
-
Object.entries(
|
405
|
-
|
406
|
-
value:
|
407
|
-
src:
|
408
|
-
name:
|
409
|
-
}) :
|
410
|
-
...
|
411
|
-
src:
|
412
|
-
name:
|
413
|
-
}) :
|
414
|
-
...
|
415
|
-
src:
|
416
|
-
name:
|
402
|
+
[...c].map(async (l) => {
|
403
|
+
const { contents: y } = await st(t, l, a);
|
404
|
+
Object.entries(y).forEach(([g, f]) => {
|
405
|
+
f.isKeyframes ? m.keyframes.push({
|
406
|
+
value: f,
|
407
|
+
src: l,
|
408
|
+
name: g
|
409
|
+
}) : f.isClassName ? m.classNames.push({
|
410
|
+
...f,
|
411
|
+
src: l,
|
412
|
+
name: g
|
413
|
+
}) : f.generator && m.components.push({
|
414
|
+
...f,
|
415
|
+
src: l,
|
416
|
+
name: g
|
417
417
|
});
|
418
418
|
});
|
419
419
|
})
|
420
420
|
);
|
421
421
|
const i = await ut(t);
|
422
|
-
for (const
|
423
|
-
const { value:
|
424
|
-
o.push(
|
422
|
+
for (const l of m.keyframes) {
|
423
|
+
const { value: y } = l, g = `a_${y.animationName}.css`, f = `css/${g}`, b = u(a, f);
|
424
|
+
o.push(g), D(b, y.css);
|
425
425
|
}
|
426
426
|
const d = {};
|
427
|
-
for (const
|
428
|
-
const { src:
|
429
|
-
callerName:
|
427
|
+
for (const l of m.components) {
|
428
|
+
const { src: y, name: g } = l, f = l.generator._withBuildContext({
|
429
|
+
callerName: g,
|
430
430
|
isProduction: e,
|
431
431
|
config: i
|
432
432
|
});
|
433
|
-
r[
|
434
|
-
const b = await
|
433
|
+
r[f.priority] || (r[f.priority] = []);
|
434
|
+
const b = await f.css;
|
435
435
|
if (!b) continue;
|
436
|
-
r[
|
437
|
-
const
|
438
|
-
|
436
|
+
r[f.priority].push(f.cssFileName);
|
437
|
+
const x = `css/${f.cssFileName}`, J = u(a, x);
|
438
|
+
D(J, b), i.importStrategy === "component" && (d[y] ? d[y].push(f.cssFileName) : d[y] = [f.cssFileName]);
|
439
439
|
}
|
440
|
-
for (const
|
441
|
-
const { src:
|
442
|
-
callerName:
|
440
|
+
for (const l of m.classNames) {
|
441
|
+
const { src: y, name: g } = l, f = l.generator._withBuildContext({
|
442
|
+
callerName: g,
|
443
443
|
isProduction: e,
|
444
444
|
config: i
|
445
|
-
}), b = await
|
445
|
+
}), b = await f.css;
|
446
446
|
if (!b) continue;
|
447
|
-
r[0].push(
|
448
|
-
const
|
449
|
-
|
447
|
+
r[0].push(f.cssFileName);
|
448
|
+
const x = `css/${f.cssFileName}`, J = u(a, x);
|
449
|
+
D(J, b), i.importStrategy === "component" && (d[y] ? d[y].push(f.cssFileName) : d[y] = [f.cssFileName]);
|
450
450
|
}
|
451
|
-
i.importStrategy === "component" && Object.entries(d).forEach(([
|
452
|
-
const
|
453
|
-
`),
|
454
|
-
|
451
|
+
i.importStrategy === "component" && Object.entries(d).forEach(([l, y]) => {
|
452
|
+
const g = y.map((K) => `@import url('./${K}');`).join(`
|
453
|
+
`), f = z(l, 6), b = et(l), x = R(b.name), J = u(a, `css/f_${x}-${f}.css`);
|
454
|
+
D(J, g);
|
455
455
|
});
|
456
|
-
const
|
456
|
+
const w = o.map((l) => `@import url('./css/${l}');`).join(`
|
457
457
|
`);
|
458
|
-
let
|
458
|
+
let k = `@layer reset, global, templates, l0, l1, l2, l3, l4, l5, l6, l7, l8;
|
459
459
|
|
460
|
-
${["_variables.css", "_reset.css", "_global.css", "_templates.css"].filter((
|
460
|
+
${["_variables.css", "_reset.css", "_global.css", "_templates.css"].filter((l) => {
|
461
461
|
try {
|
462
|
-
return M(u(a, "css",
|
462
|
+
return M(u(a, "css", l), "utf8").length > 0;
|
463
463
|
} catch {
|
464
464
|
return !1;
|
465
465
|
}
|
466
|
-
}).map((
|
466
|
+
}).map((l) => `@import url('./css/${l}');`).join(`
|
467
467
|
`)}
|
468
|
-
${
|
468
|
+
${w}`;
|
469
469
|
if (i.importStrategy !== "component") {
|
470
|
-
const
|
471
|
-
const b =
|
470
|
+
const l = r.reduce((y, g, f) => {
|
471
|
+
const b = g.reduce((L, Z) => {
|
472
472
|
var X;
|
473
|
-
const U = u(a, "css",
|
474
|
-
return
|
475
|
-
/*start:${q}*/
|
473
|
+
const U = u(a, "css", Z), nt = M(U, "utf8"), q = ((X = /.*-([^-]+)-\d+.css/.exec(Z)) == null ? void 0 : X.at(1)) || z(U, 6);
|
474
|
+
return L.includes(q) ? L : `${L}
|
475
|
+
/*start:${q}-${Z}*/
|
476
476
|
${nt}
|
477
477
|
/*end:${q}*/
|
478
478
|
`;
|
479
|
-
}, ""),
|
479
|
+
}, ""), x = `l_${f}.css`, J = u(a, "css", x), K = `@layer l${f} { ${b}
|
480
480
|
}`;
|
481
|
-
return
|
482
|
-
@import url('./css/${
|
481
|
+
return D(J, K), `${y}
|
482
|
+
@import url('./css/${x}');`;
|
483
483
|
}, "");
|
484
|
-
|
484
|
+
k += l;
|
485
485
|
}
|
486
|
-
|
487
|
-
const
|
488
|
-
at.info(`Generated CSS in ${
|
486
|
+
D(h, k);
|
487
|
+
const N = Date.now() - n, O = N < 200 ? "🔥" : N < 500 ? "🚀" : N < 1e3 ? "🎉" : N < 2e3 ? "🚗" : N < 5e3 ? "🤔" : "🥴";
|
488
|
+
at.info(`Generated CSS in ${N}ms! ${O}`);
|
489
489
|
} catch (n) {
|
490
490
|
console.error(n);
|
491
491
|
}
|
492
|
-
}, ee = async (t, e) => {
|
492
|
+
}, ee = async (t, e, s = dt()) => {
|
493
493
|
try {
|
494
|
-
const
|
495
|
-
if (
|
496
|
-
const
|
497
|
-
for (const [
|
498
|
-
if (
|
499
|
-
const
|
500
|
-
|
494
|
+
const n = await v(t);
|
495
|
+
if (G(e)) {
|
496
|
+
const r = [], a = await ut(t), { contents: h } = await st(t, e, n);
|
497
|
+
for (const [S, c] of Object.entries(h)) {
|
498
|
+
if (c.isKeyframes && c.css) {
|
499
|
+
const w = `css/${`a_${c.animationName}.css`}`, j = u(n, w);
|
500
|
+
D(j, await c.css);
|
501
501
|
return;
|
502
502
|
}
|
503
|
-
if (
|
504
|
-
const
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
503
|
+
if (c.isClassName) {
|
504
|
+
const d = c.generator._withBuildContext({
|
505
|
+
callerName: S,
|
506
|
+
isProduction: s,
|
507
|
+
config: a
|
508
|
+
}), w = await d.css;
|
509
|
+
if (!w) continue;
|
510
|
+
r[0].push(d.cssFileName);
|
511
|
+
const j = `css/${d.cssFileName}`, P = u(n, j);
|
512
|
+
D(P, w);
|
511
513
|
}
|
512
|
-
if (!
|
513
|
-
const
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
514
|
+
if (!c.generator) return;
|
515
|
+
const p = c.generator._withBuildContext({
|
516
|
+
callerName: S,
|
517
|
+
isProduction: s,
|
518
|
+
config: a
|
519
|
+
}), $ = await p.css;
|
520
|
+
if (!$) continue;
|
521
|
+
const m = `css/${p.cssFileName}`, i = u(n, m);
|
522
|
+
D(i, $), r[p.priority] || (r[p.priority] = []), r[p.priority].push(p.cssFileName);
|
520
523
|
}
|
521
|
-
if (
|
522
|
-
|
523
|
-
const
|
524
|
-
let
|
525
|
-
|
526
|
-
var
|
527
|
-
const
|
528
|
-
if (
|
529
|
-
const
|
530
|
-
${_}
|
531
|
-
/*end:${d}*/
|
532
|
-
`;
|
533
|
-
$ = `${$.replace(/\}$/, "")}
|
524
|
+
if (a.importStrategy !== "component")
|
525
|
+
r.forEach((S, c) => {
|
526
|
+
const p = `l_${c}.css`, $ = u(n, "css", p);
|
527
|
+
let m = M($, "utf8");
|
528
|
+
S.forEach((i) => {
|
529
|
+
var P;
|
530
|
+
const d = u(n, "css", i), w = ((P = /.*-([^-]+)-\d+.css/.exec(i)) == null ? void 0 : P.at(1)) || z(d, 6);
|
531
|
+
if (!m.includes(w)) {
|
532
|
+
const E = M(d, "utf8"), k = `/*start:${w}-${i}*/
|
534
533
|
${E}
|
534
|
+
/*end:${w}*/
|
535
|
+
`;
|
536
|
+
m = `${m.replace(/\}$/, "")}
|
537
|
+
${k}
|
535
538
|
}`;
|
536
539
|
}
|
537
|
-
}),
|
540
|
+
}), D($, m);
|
538
541
|
});
|
539
542
|
else {
|
540
|
-
const
|
541
|
-
`),
|
542
|
-
|
543
|
+
const S = r.flat().map((i) => `@import url('./${i}');`).join(`
|
544
|
+
`), c = z(e, 6), p = et(e), $ = R(p.name), m = u(n, `css/f_${$}-${c}.css`);
|
545
|
+
D(m, S);
|
543
546
|
}
|
544
547
|
}
|
545
|
-
} catch (
|
546
|
-
console.error(
|
548
|
+
} catch (n) {
|
549
|
+
console.error(n);
|
547
550
|
}
|
548
|
-
}, se = async (t, e, s =
|
551
|
+
}, se = async (t, e, s = dt()) => {
|
549
552
|
try {
|
550
553
|
const n = await v(t);
|
551
|
-
if (
|
554
|
+
if (G(e)) {
|
552
555
|
const r = M(e, "utf8");
|
553
|
-
r.replace(/^(?!export\s)const\s.*/gm, (
|
554
|
-
const
|
555
|
-
let
|
556
|
-
if (Object.entries(
|
557
|
-
var
|
556
|
+
r.replace(/^(?!export\s)const\s.*/gm, (p) => `export ${p}`) !== r && await Ot(e, r);
|
557
|
+
const h = await ut(t), { contents: S } = await st(t, e, n);
|
558
|
+
let c = r;
|
559
|
+
if (Object.entries(S).forEach(([p, $]) => {
|
560
|
+
var f;
|
558
561
|
if ($.isKeyframes || !$.generator) return;
|
559
|
-
const
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
}), i = new RegExp(`\\s${
|
562
|
+
const m = $.generator._withBuildContext({
|
563
|
+
callerName: p,
|
564
|
+
isProduction: s,
|
565
|
+
config: h
|
566
|
+
}), i = new RegExp(`\\s${p}[=\\s]+[^()]+styled\\(([^,]+),`, "g").exec(r);
|
564
567
|
if (!i) return console.error("Could not find the original declaration");
|
565
|
-
const d = (
|
566
|
-
if (!
|
567
|
-
const { index:
|
568
|
-
let
|
569
|
-
const E = setTimeout(() =>
|
570
|
-
let
|
571
|
-
for (; !
|
572
|
-
const b =
|
573
|
-
b === "(" &&
|
568
|
+
const d = (f = i.at(1)) == null ? void 0 : f.trim(), w = new RegExp(`\\s${p}[=\\s]+styled\\(`, "g").exec(c);
|
569
|
+
if (!w) return console.error("Could not find the original declaration");
|
570
|
+
const { index: j } = w;
|
571
|
+
let P = !1;
|
572
|
+
const E = setTimeout(() => P = !0, 5e3);
|
573
|
+
let k = 0, _ = !1, N = 0;
|
574
|
+
for (; !_ && !P; ) {
|
575
|
+
const b = c[j + k];
|
576
|
+
b === "(" && N++, b === ")" && N--, N === 0 && b === ")" && (_ = !0), k > c.length && (P = !0), k++;
|
574
577
|
}
|
575
|
-
if (!
|
578
|
+
if (!P) clearTimeout(E);
|
576
579
|
else throw new Error("Failed to find the end of the styled call and timed out");
|
577
|
-
const O =
|
578
|
-
|
579
|
-
}),
|
580
|
-
const
|
581
|
-
|
582
|
-
${
|
580
|
+
const O = j + k, l = c.slice(j, O), y = c, g = ` ${p} = styled(${d}, "${m.classNames}", ${JSON.stringify(m.clientProps)});`;
|
581
|
+
c = c.replace(l, g), y === c && console.error("Minimize file failed to change content", { name: p, tagName: d });
|
582
|
+
}), h.importStrategy === "component") {
|
583
|
+
const p = z(e, 6), $ = et(e);
|
584
|
+
c = `import '../../saltygen/css/${`f_${R($.name)}-${p}.css`}';
|
585
|
+
${c}`;
|
583
586
|
}
|
584
|
-
return
|
587
|
+
return c = c.replace("{ styled }", "{ styledClient as styled }"), c = c.replace("@salty-css/react/styled", "@salty-css/react/styled-client"), c;
|
585
588
|
}
|
586
589
|
} catch (n) {
|
587
590
|
console.error("Error in minimizeFile:", n);
|
588
591
|
}
|
589
|
-
},
|
592
|
+
}, $t = async (t) => {
|
590
593
|
if (!t || t.includes("node_modules") || t.includes("saltygen")) return !1;
|
591
594
|
if (t.includes("salty.config")) return !0;
|
592
|
-
if (!
|
595
|
+
if (!G(t)) return !1;
|
593
596
|
const n = await lt(t, "utf-8");
|
594
597
|
return !!/.+define[A-Z]\w+/.test(n);
|
595
598
|
}, ce = (t) => ({
|
596
599
|
name: "stylegen",
|
597
600
|
buildStart: () => te(t),
|
598
601
|
load: async (e) => {
|
599
|
-
if (
|
602
|
+
if (G(e))
|
600
603
|
return await se(t, e);
|
601
604
|
},
|
602
605
|
handleHotUpdate: async ({ file: e, server: s }) => {
|
603
|
-
await
|
606
|
+
await $t(e) && await s.restart();
|
604
607
|
},
|
605
608
|
watchChange: {
|
606
609
|
handler: async (e) => {
|
607
|
-
|
610
|
+
G(e) && (await $t(e) || await ee(t, e));
|
608
611
|
}
|
609
612
|
}
|
610
613
|
});
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@salty-css/vite",
|
3
|
-
"version": "0.0.1-alpha.
|
3
|
+
"version": "0.0.1-alpha.207",
|
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.
|
37
|
+
"@salty-css/core": "^0.0.1-alpha.207"
|
38
38
|
}
|
39
39
|
}
|