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