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