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