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