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