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