@salty-css/core 0.0.1-alpha.233 → 0.0.1-alpha.235
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/bin/main.cjs +1 -1
- package/bin/main.js +2 -2
- package/compiler/index.cjs +1 -1
- package/compiler/index.js +1 -1
- package/index-BBffxkVO.cjs +38 -0
- package/{index-D6UVbPah.js → index-CplHXohq.js} +40 -40
- package/package.json +1 -1
- package/server/index.cjs +1 -1
- package/server/index.js +1 -1
- package/{should-restart-0ZMFyli-.js → should-restart-DgG-4Ee4.js} +1 -1
- package/{should-restart-lhNr1-w7.cjs → should-restart-Rq0dgdA1.cjs} +1 -1
- package/index-AIl-HgpW.cjs +0 -38
package/bin/main.cjs
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const te=require("commander"),A=require("fs"),s=require("fs/promises"),n=require("path"),ne=require("ejs"),e=require("../index-
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const te=require("commander"),A=require("fs"),s=require("fs/promises"),n=require("path"),ne=require("ejs"),e=require("../index-BBffxkVO.cjs"),ie=require("../pascal-case-iWoaJWwT.cjs"),se=require("child_process"),oe=require("ora"),ae=require("../should-restart-Rq0dgdA1.cjs");var G=typeof document<"u"?document.currentScript:null;const X=y=>new Promise((C,P)=>{se.exec(y,x=>{if(x)return P(x);C()})}),I=async(...y)=>{const C=y.map(b=>b.replace("-D","").split("@").slice(0,-1).join("@").trim()).join(", "),P=oe(`Installing packages: ${C}`).start(),x=y.join(" ");await X(`npm install ${x}`),P.succeed(`Installed packages: ${C}`)},re=()=>A.existsSync(n.join(process.cwd(),"node_modules",".bin","prettier"));async function S(y){try{if(!re())return;await X(`./node_modules/.bin/prettier --write "${y}"`),e.logger.info(`Formatted ${y} with Prettier`)}catch(C){e.logger.error(`Error formatting ${y} with Prettier:`,C)}}async function ce(){const y=new te.Command;y.name("salty-css").description("Salty-CSS CLI tool to help with annoying configuration tasks.");const C={"salty.config.ts":Promise.resolve().then(()=>require("../salty.config-Dk6ZcCxI.cjs")),"saltygen/index.css":Promise.resolve().then(()=>require("../index-84Wroia-.cjs")),"react/react-styled-file.ts":Promise.resolve().then(()=>require("../react-styled-file-Dkubsz-U.cjs")),"react/react-vanilla-file.ts":Promise.resolve().then(()=>require("../react-vanilla-file-CG_WJLam.cjs"))},P=async(i,a)=>{const{default:f}=await C[i],d=ne.render(f,a);return{fileName:i,content:d}},x=async()=>{const i=n.join(process.cwd(),".saltyrc.json");return await s.readFile(i,"utf-8").then(JSON.parse).catch(()=>({}))},b=n.join(process.cwd(),"package.json"),N=async(i=b)=>{const a=await s.readFile(i,"utf-8").then(JSON.parse).catch(()=>{});if(!a)throw"Could not read package.json file!";return a},Y=async(i,a=b)=>{typeof i=="object"&&(i=JSON.stringify(i,null,2)),await s.writeFile(a,i)},B=async()=>{const i=new URL("../package.json",typeof document>"u"?require("url").pathToFileURL(__filename).href:G&&G.tagName.toUpperCase()==="SCRIPT"&&G.src||new URL("bin/main.cjs",document.baseURI).href);return N(i)},V=await(async()=>(await x()).defaultProject)(),$=await B(),D={core:`@salty-css/core@${$.version}`,react:`@salty-css/react@${$.version}`,eslintConfigCore:`@salty-css/eslint-config-core@${$.version}`,vite:`@salty-css/vite@${$.version}`,next:`@salty-css/next@${$.version}`},H=i=>{const a=i==="."?"":i,f=process.cwd();return n.join(f,a)};y.command("init [directory]").description("Initialize a new Salty-CSS project.").option("-d, --dir <dir>","Project directory to initialize the project in.").option("--css-file <css-file>","Existing CSS file where to import the generated CSS. Path must be relative to the given project directory.").option("--skip-install","Skip installing dependencies.").action(async function(i="."){if(!await N().catch(()=>{}))return e.logError("Salty CSS project must be initialized in a directory with a package.json file.");e.logger.info("Initializing a new Salty-CSS project!");const{dir:f=i,cssFile:d,skipInstall:p}=this.opts();if(!f)return e.logError("Project directory must be provided. Add it as the first argument after init command or use the --dir option.");p||await I(D.core,D.react);const c=process.cwd(),r=H(f),q=await Promise.all([P("salty.config.ts"),P("saltygen/index.css")]);await s.mkdir(r,{recursive:!0});const m=q.map(async({fileName:t,content:u})=>{const l=n.join(r,t);if(await s.readFile(l,"utf-8").catch(()=>{})!==void 0){e.logger.debug("File already exists: "+l);return}const k=t.split("/").slice(0,-1).join("/");k&&await s.mkdir(n.join(r,k),{recursive:!0}),e.logger.info("Creating file: "+l),await s.writeFile(l,u),await S(l)});await Promise.all(m);const w=n.relative(c,r)||".",h=n.join(c,".saltyrc.json"),g=await s.readFile(h,"utf-8").catch(()=>{});if(g===void 0){e.logger.info("Creating file: "+h);const u=JSON.stringify({$schema:"./node_modules/@salty-css/core/.saltyrc.schema.json",info:"This file is used to define projects and their configurations for Salty CSS cli. Do not delete, modify or add this file to .gitignore.",defaultProject:w,projects:[{dir:w,framework:"react"}]},null,2);await s.writeFile(h,u),await S(h)}else{const t=JSON.parse(g),u=(t==null?void 0:t.projects)||[];if(u.findIndex(o=>o.dir===w)===-1){u.push({dir:w,framework:"react"}),t.projects=[...u];const o=JSON.stringify(t,null,2);o!==g&&(e.logger.info("Edit file: "+h),await s.writeFile(h,o),await S(h))}}const j=n.join(c,".gitignore"),T=await s.readFile(j,"utf-8").catch(()=>{});T!==void 0&&(T.includes("saltygen")||(e.logger.info("Edit file: "+j),await s.writeFile(j,T+`
|
2
2
|
|
3
3
|
# Salty-CSS
|
4
4
|
saltygen
|
package/bin/main.js
CHANGED
@@ -3,11 +3,11 @@ import { existsSync as Q, watch as re } from "fs";
|
|
3
3
|
import { mkdir as q, readFile as S, writeFile as C } from "fs/promises";
|
4
4
|
import { join as a, relative as z, parse as ce, format as te } from "path";
|
5
5
|
import { render as le } from "ejs";
|
6
|
-
import { l as t, a as h, g as K, i as de, b as fe } from "../index-
|
6
|
+
import { l as t, a as h, g as K, i as de, b as fe } from "../index-CplHXohq.js";
|
7
7
|
import { p as pe } from "../pascal-case-BQpR5PdN.js";
|
8
8
|
import { exec as ue } from "child_process";
|
9
9
|
import ge from "ora";
|
10
|
-
import { c as ye } from "../should-restart-
|
10
|
+
import { c as ye } from "../should-restart-DgG-4Ee4.js";
|
11
11
|
const ne = (g) => new Promise((P, x) => {
|
12
12
|
ue(g, ($) => {
|
13
13
|
if ($) return x($);
|
package/compiler/index.cjs
CHANGED
@@ -1 +1 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("esbuild");require("child_process");require("../dash-case-BJEkFEGQ.cjs");require("path");require("fs");require("fs/promises");require("../parse-styles-3N79AOBO.cjs");const e=require("../index-
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("esbuild");require("child_process");require("../dash-case-BJEkFEGQ.cjs");require("path");require("fs");require("fs/promises");require("../parse-styles-3N79AOBO.cjs");const e=require("../index-BBffxkVO.cjs");require("../css/merge.cjs");require("../define-templates-Cunsb_Tr.cjs");exports.compileSaltyFile=e.compileSaltyFile;exports.generateConfigStyles=e.generateConfigStyles;exports.generateCss=e.generateCss;exports.generateFile=e.generateFile;exports.isSaltyFile=e.isSaltyFile;exports.minimizeFile=e.minimizeFile;exports.saltyFileExtensions=e.saltyFileExtensions;exports.saltyFileRegExp=e.saltyFileRegExp;
|
package/compiler/index.js
CHANGED
@@ -5,7 +5,7 @@ import "path";
|
|
5
5
|
import "fs";
|
6
6
|
import "fs/promises";
|
7
7
|
import "../parse-styles-Bo7fQ_SV.js";
|
8
|
-
import { e as g, d as F, g as y, b as x, i as S, m as c, s as f, c as C } from "../index-
|
8
|
+
import { e as g, d as F, g as y, b as x, i as S, m as c, s as f, c as C } from "../index-CplHXohq.js";
|
9
9
|
import "../css/merge.js";
|
10
10
|
import "../define-templates-4A2yHcMF.js";
|
11
11
|
export {
|
@@ -0,0 +1,38 @@
|
|
1
|
+
"use strict";const _e=require("esbuild"),Te=require("child_process"),D=require("./dash-case-BJEkFEGQ.cjs"),c=require("path"),r=require("fs"),he=require("fs/promises"),ee=require("./parse-styles-3N79AOBO.cjs"),L=require("winston"),M=require("./css/merge.cjs"),Oe=require("./define-templates-Cunsb_Tr.cjs"),ae=require("typescript");var ce=typeof document<"u"?document.currentScript:null;function Ee(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 we=Ee(_e),Se=async(e,t=[])=>{if(!e)return"";const s=[],n={};for(const[o,i]of Object.entries(e))if(typeof i!="function")if(i&&typeof i=="object"){const a=o.trim(),d=await Se(i,[...t,a]);s.push(d)}else n[o]=i;if(Object.keys(n).length){const o=t.map(D.dashCase).join("-"),i="t_"+D.toHash(o,4),a=await ee.parseAndJoinStyles(n,`.${o}, .${i}`);s.push(a)}return s.join(`
|
2
|
+
`)},ve=e=>e?Object.entries(e).reduce((t,[s,n])=>(typeof n=="function"?t[s]="any":typeof n=="object"&&(t[s]=je(n).map(o=>`"${o}"`).join(" | ")),t),{}):{},je=(e,t="",s=new Set)=>e?(Object.entries(e).forEach(([n,o])=>{const i=t?`${t}.${n}`:n;return typeof o=="object"?je(o,i,s):s.add(t)}),[...s]):[],be=e=>{if(!e||e==="/")throw new Error("Could not find package.json file");const t=c.join(e,"package.json");return r.existsSync(t)?t:be(c.join(e,".."))},Ve=async e=>{const t=be(e);return await he.readFile(t,"utf-8").then(JSON.parse).catch(()=>{})},Re=async e=>{const t=await Ve(e);if(t)return t.type};let q;const $e=async e=>{if(q)return q;const t=await Re(e);return t==="module"?q="esm":(t==="commonjs"||(typeof document>"u"?require("url").pathToFileURL(__filename).href:ce&&ce.tagName.toUpperCase()==="SCRIPT"&&ce.src||new URL("index-BBffxkVO.cjs",document.baseURI).href).endsWith(".cjs"))&&(q="cjs"),q||"esm"},B=L.createLogger({level:"debug",format:L.format.combine(L.format.colorize(),L.format.cli()),transports:[new L.transports.Console({})]}),Me=e=>{B.error(e)};function Fe(e){return e?typeof e!="string"?Fe(String(e)):e.replace(/[^\d\w]/g,"."):""}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"}},ze=(e,t)=>new Promise((s,n)=>{const o=setTimeout(()=>{n(new Error("Timeout"))},100),i=ae.createSourceFile("temp.ts",e,ae.ScriptTarget.Latest,!0);function a(d){if(ae.isVariableDeclaration(d)&&d.name.getText()===t){const g=d.getStart(),m=d.getEnd();clearTimeout(o),s([g,m])}d.forEachChild(a)}a(i)}),E={externalModules:[],rcFile:void 0,destDir:void 0},Ce=e=>{if(E.externalModules.length>0)return E.externalModules;const s=r.readFileSync(e,"utf8").match(/externalModules:\s?\[(.*)\]/);if(!s)return[];const n=s[1].split(",").map(o=>o.replace(/['"`]/g,"").trim());return E.externalModules=n,n},J=async e=>{if(E.destDir)return E.destDir;const t=await le(e),s=c.join(e,(t==null?void 0:t.saltygenDir)||"saltygen");return E.destDir=s,s},re=["salty","css","styles","styled"],Pe=(e=[])=>new RegExp(`\\.(${[...re,...e].join("|")})\\.`),te=(e,t=[])=>Pe(t).test(e),Ne=async e=>{if(E.rcFile)return E.rcFile;if(e==="/")throw new Error("Could not find .saltyrc.json file");const t=c.join(e,".saltyrc.json"),s=await he.readFile(t,"utf-8").then(JSON.parse).catch(()=>{});return s?(E.rcFile=s,s):Ne(c.join(e,".."))},le=async e=>{var n,o;const t=await Ne(e),s=(n=t.projects)==null?void 0:n.find(i=>e.endsWith(i.dir||""));return s||((o=t.projects)==null?void 0:o.find(i=>i.dir===t.defaultProject))},qe=async e=>{const t=await le(e),s=await J(e),n=c.join(e,(t==null?void 0:t.configDir)||"","salty.config.ts"),o=c.join(s,"salty.config.js"),i=await $e(e),a=Ce(n);await we.build({entryPoints:[n],minify:!0,treeShaking:!0,bundle:!0,outfile:o,format:i,external:a});const d=Date.now(),{config:g}=await import(`${o}?t=${d}`);return{config:g,path:o}},ke=async(e,t)=>{var de,me;const s=await J(e),n={mediaQueries:[],globalStyles:[],variables:[],templates:[]};await Promise.all([...t].map(async S=>{const{contents:$,outputFilePath:K}=await Q(e,S,s);Object.entries($).forEach(([O,P])=>{P.isMedia?n.mediaQueries.push([O,P]):P.isGlobalDefine?n.globalStyles.push(P):P.isDefineVariables?n.variables.push(P):P.isDefineTemplates&&n.templates.push(P._setPath(`${O};;${K}`))})}));const{config:o,path:i}=await qe(e),a={...o},d=new Set,g=async(S,$=[])=>{if(!S)return[];const K=Object.entries(S).map(async([P,z])=>{const Y=async _=>{if(!_)return;if(_ instanceof Promise)return await Y(await _);if(typeof _=="function")return await Y(await _());if(typeof _=="object")return await g(_,[...$,P]);const ne=Fe(P),oe=D.dashCase(P),ie=[...$,ne].join(".");d.add(`"${ie}"`);const Z=[...$.map(D.dashCase),oe].join("-"),ye=ee.parseVariableTokens(_);return ye?`--${Z}: ${ye.transformed};`:`--${Z}: ${_};`};return await Y(z)});return(await Promise.all(K)).flat()},m=async S=>{if(!S)return[];const $=Object.entries(S).map(async([O,P])=>{const z=await g(P);return O==="base"?z.join(""):`${O} { ${z.join("")} }`});return(await Promise.all($)).flat()},l=async S=>{if(!S)return[];const $=Object.entries(S).map(async([O,P])=>{const z=Object.entries(P).map(async([_,ne])=>{const oe=await g(ne,[O]),ie=`.${O}-${_}, [data-${O}="${_}"]`,Z=oe.join("");return`${ie} { ${Z} }`});return(await Promise.all(z)).flat()});return(await Promise.all($)).flat()},h=S=>({...S,responsive:void 0,conditional:void 0}),p=S=>n.variables.map($=>S==="static"?h($._current):$._current[S]),w=M.mergeObjects(h(o.variables),p("static")),y=await g(w),F=M.mergeObjects((de=o.variables)==null?void 0:de.responsive,p("responsive")),k=await m(F),x=M.mergeObjects((me=o.variables)==null?void 0:me.conditional,p("conditional")),v=await l(x),V=c.join(s,"css/_variables.css"),pe=`:root { ${y.join("")} ${k.join("")} } ${v.join("")}`;r.writeFileSync(V,pe),a.staticVariables=w;const R=c.join(s,"css/_global.css"),se=M.mergeObjects(o.global,n.globalStyles),u=await ee.parseAndJoinStyles(se,"");r.writeFileSync(R,`@layer global { ${u} }`);const j=c.join(s,"css/_reset.css"),f=o.reset==="none"?{}:typeof o.reset=="object"?o.reset:Je,C=await ee.parseAndJoinStyles(f,"");r.writeFileSync(j,`@layer reset { ${C} }`);const N=c.join(s,"css/_templates.css"),T=M.mergeObjects(o.templates,n.templates),H=await Se(T),W=ve(T);r.writeFileSync(N,`@layer templates { ${H} }`),a.templates=T;const I=o.templates?[Oe.defineTemplates(o.templates)._setPath(`config;;${i}`)]:[],U=M.mergeFactories(n.templates,I);a.templatePaths=Object.fromEntries(Object.entries(U).map(([S,$])=>[S,$._path]));const{mediaQueries:A}=n;a.mediaQueries=Object.fromEntries(A.map(([S,$])=>[`@${S}`,$]));const G=A.map(([S])=>`'@${S}'`).join(" | "),X=c.join(s,"types/css-tokens.d.ts"),xe=`
|
3
|
+
// Variable types
|
4
|
+
type VariableTokens = ${[...d].join("|")};
|
5
|
+
type PropertyValueToken = \`{\${VariableTokens}}\`;
|
6
|
+
|
7
|
+
// Template types
|
8
|
+
type TemplateTokens = {
|
9
|
+
${Object.entries(W).map(([S,$])=>`${S}?: ${$}`).join(`
|
10
|
+
`)}
|
11
|
+
}
|
12
|
+
|
13
|
+
// Media query types
|
14
|
+
type MediaQueryKeys = ${G||"''"};
|
15
|
+
`;r.writeFileSync(X,xe);const De=c.join(s,"cache/config-cache.json");r.writeFileSync(De,JSON.stringify(a,null,2))},ge=e=>e.replace(/styled\(([^"'`{,]+),/g,(t,s)=>{if(/^['"`]/.test(s))return t;const o=new RegExp(`import[^;]*${s}[,\\s{][^;]*from\\s?([^{};]+);`);if(!o.test(e))return t;const a=o.exec(e);if(a){const d=a.at(1);if(re.some(m=>d==null?void 0:d.includes(m)))return t}return"styled('div',"}),He=(e,t)=>{try{const s=r.readFileSync(c.join(t,"saltygen/cache/config-cache.json"),"utf8");return s?`globalThis.saltyConfig = ${s};
|
16
|
+
|
17
|
+
${e}`:`globalThis.saltyConfig = {};
|
18
|
+
|
19
|
+
${e}`}catch{return e}},Q=async(e,t,s)=>{const n=D.toHash(t),o=c.join(s,"./temp");r.existsSync(o)||r.mkdirSync(o);const i=c.parse(t);let a=r.readFileSync(t,"utf8");a=ge(a),a=He(a,e);const d=c.join(s,"js",n+".js"),g=await le(e),m=c.join(e,(g==null?void 0:g.configDir)||"","salty.config.ts"),l=Ce(m),h=await $e(e);await we.build({stdin:{contents:a,sourcefile:i.base,resolveDir:i.dir,loader:"tsx"},minify:!1,treeShaking:!0,bundle:!0,outfile:d,format:h,target:["node20"],keepNames:!0,external:l,packages:"external",plugins:[{name:"test",setup:y=>{y.onLoad({filter:/.*\.css|salty|styles|styled\.ts/},F=>{const k=r.readFileSync(F.path,"utf8");return{contents:ge(k),loader:"ts"}})}}]});const p=Date.now();return{contents:await import(`${d}?t=${p}`),outputFilePath:d}},We=async e=>{const t=await J(e),s=c.join(t,"cache/config-cache.json"),n=r.readFileSync(s,"utf8");if(!n)throw new Error("Could not find config cache file");return JSON.parse(n)},fe=async e=>{const t=await We(e),s=await J(e),n=c.join(s,"salty.config.js"),o=Date.now(),{config:i}=await import(`${n}?t=${o}`);return M.mergeObjects(i,t)},ue=()=>{try{return process.env.NODE_ENV==="production"}catch{return!1}},Ie=async(e,t=ue(),s=!0)=>{try{const n=Date.now();t?B.info("Generating CSS in production mode! 🔥"):B.info("Generating CSS in development mode! 🚀");const o=[],i=[],a=await J(e),d=c.join(a,"index.css");s&&(()=>{r.existsSync(a)&&Te.execSync("rm -rf "+a),r.mkdirSync(a,{recursive:!0}),r.mkdirSync(c.join(a,"css")),r.mkdirSync(c.join(a,"types")),r.mkdirSync(c.join(a,"js")),r.mkdirSync(c.join(a,"cache"))})();const m=new Set,l=new Set;async function h(u){const j=["node_modules","saltygen"],b=r.statSync(u);if(b.isDirectory()){const f=r.readdirSync(u);if(j.some(N=>u.includes(N)))return;await Promise.all(f.map(N=>h(c.join(u,N))))}else if(b.isFile()&&te(u)){m.add(u);const C=r.readFileSync(u,"utf8");/define[\w\d]+\(/.test(C)&&l.add(u)}}await h(e),await ke(e,l);const p={keyframes:[],components:[],classNames:[]};await Promise.all([...m].map(async u=>{const{contents:j}=await Q(e,u,a);for(let[b,f]of Object.entries(j))f instanceof Promise&&(f=await f),f.isKeyframes?p.keyframes.push({value:f,src:u,name:b}):f.isClassName?p.classNames.push({...f,src:u,name:b}):f.generator&&p.components.push({...f,src:u,name:b})}));const w=await fe(e);for(const u of p.keyframes){const{value:j}=u,b=`a_${j.animationName}.css`,f=`css/${b}`,C=c.join(a,f);o.push(b),r.writeFileSync(C,j.css)}const y={};for(const u of p.components){const{src:j,name:b}=u;y[j]||(y[j]=[]);const f=u.generator._withBuildContext({callerName:b,isProduction:t,config:w});i[f.priority]||(i[f.priority]=[]);const C=await f.css;if(!C)continue;i[f.priority].push(f.cssFileName);const N=`css/${f.cssFileName}`,T=c.join(a,N);r.writeFileSync(T,C),w.importStrategy==="component"&&y[j].push(f.cssFileName)}for(const u of p.classNames){const{src:j,name:b}=u;y[j]||(y[j]=[]);const f=u.generator._withBuildContext({callerName:b,isProduction:t,config:w}),C=await f.css;if(!C)continue;i[f.priority]||(i[f.priority]=[]),i[f.priority].push(f.cssFileName);const N=`css/${f.cssFileName}`,T=c.join(a,N);r.writeFileSync(T,C),w.importStrategy==="component"&&y[j].push(f.cssFileName)}w.importStrategy==="component"&&Object.entries(y).forEach(([u,j])=>{const b=j.map(H=>`@import url('./${H}');`).join(`
|
20
|
+
`),f=D.toHash(u,6),C=c.parse(u),N=D.dashCase(C.name),T=c.join(a,`css/f_${N}-${f}.css`);r.writeFileSync(T,b||"/* Empty file */")});const F=o.map(u=>`@import url('./css/${u}');`).join(`
|
21
|
+
`);let V=`@layer reset, global, templates, l0, l1, l2, l3, l4, l5, l6, l7, l8;
|
22
|
+
|
23
|
+
${["_variables.css","_reset.css","_global.css","_templates.css"].filter(u=>{try{return r.readFileSync(c.join(a,"css",u),"utf8").length>0}catch{return!1}}).map(u=>`@import url('./css/${u}');`).join(`
|
24
|
+
`)}
|
25
|
+
${F}`;if(w.importStrategy!=="component"){const u=i.reduce((j,b,f)=>{const C=b.reduce((W,I)=>{var X;const U=c.join(a,"css",I),A=r.readFileSync(U,"utf8"),G=((X=/.*-([^-]+)-\d+.css/.exec(I))==null?void 0:X.at(1))||D.toHash(U,6);return W.includes(G)?W:`${W}
|
26
|
+
/*start:${G}-${I}*/
|
27
|
+
${A}
|
28
|
+
/*end:${G}*/
|
29
|
+
`},""),N=`l_${f}.css`,T=c.join(a,"css",N),H=`@layer l${f} { ${C}
|
30
|
+
}`;return r.writeFileSync(T,H),`${j}
|
31
|
+
@import url('./css/${N}');`},"");V+=u}r.writeFileSync(d,V);const R=Date.now()-n,se=R<200?"🔥":R<500?"🚀":R<1e3?"🎉":R<2e3?"🚗":R<5e3?"🤔":"🥴";B.info(`Generated CSS in ${R}ms! ${se}`)}catch(n){console.error(n)}},Ge=async(e,t,s=ue())=>{try{const n=await J(e);if(te(t)){const i=[],a=await fe(e),{contents:d}=await Q(e,t,n);for(const[g,m]of Object.entries(d)){if(m.isKeyframes&&m.css){const F=`css/${`a_${m.animationName}.css`}`,k=c.join(n,F);r.writeFileSync(k,await m.css);return}if(m.isClassName){const y=m.generator._withBuildContext({callerName:g,isProduction:s,config:a}),F=await y.css;if(!F)continue;i[y.priority]||(i[y.priority]=[]),i[y.priority].push(y.cssFileName);const k=`css/${y.cssFileName}`,x=c.join(n,k);r.writeFileSync(x,F)}if(!m.generator)return;const l=m.generator._withBuildContext({callerName:g,isProduction:s,config:a}),h=await l.css;if(!h)continue;const p=`css/${l.cssFileName}`,w=c.join(n,p);r.writeFileSync(w,h),i[l.priority]||(i[l.priority]=[]),i[l.priority].push(l.cssFileName)}if(a.importStrategy!=="component")i.forEach((g,m)=>{const l=`l_${m}.css`,h=c.join(n,"css",l);let p=r.readFileSync(h,"utf8");g.forEach(w=>{var x;const y=c.join(n,"css",w),F=((x=/.*-([^-]+)-\d+.css/.exec(w))==null?void 0:x.at(1))||D.toHash(y,6);if(!p.includes(F)){const v=r.readFileSync(y,"utf8"),V=`/*start:${F}-${w}*/
|
32
|
+
${v}
|
33
|
+
/*end:${F}*/
|
34
|
+
`;p=`${p.replace(/\}$/,"")}
|
35
|
+
${V}
|
36
|
+
}`}}),r.writeFileSync(h,p)});else{const g=i.flat().map(w=>`@import url('./${w}');`).join(`
|
37
|
+
`),m=D.toHash(t,6),l=c.parse(t),h=D.dashCase(l.name),p=c.join(n,`css/f_${h}-${m}.css`);r.writeFileSync(p,g||"/* Empty file */")}}}catch(n){console.error(n)}},Ke=async(e,t,s=ue())=>{var n,o;try{const i=await J(e);if(te(t)){const d=r.readFileSync(t,"utf8"),g=await fe(e),{contents:m}=await Q(e,t,i);let l=d;for(const[h,p]of Object.entries(m)){if(p.isKeyframes||!p.generator)continue;const w=p.generator._withBuildContext({callerName:h,isProduction:s,config:g}),[y,F]=await ze(l,h),k=l.slice(y,F);if(p.isClassName){const x=l,v=` ${h} = className("${w.classNames}")`;l=l.replace(k,v),x===l&&console.error("Minimize file failed to change content",{name:h})}if(k.includes("styled")){const x=(o=(n=/styled\(([^,]+),/.exec(k))==null?void 0:n.at(1))==null?void 0:o.trim(),v=l,V=` ${h} = styled(${x}, "${w.classNames}", ${JSON.stringify(w.clientProps)})`;l=l.replace(k,V),v===l&&console.error("Minimize file failed to change content",{name:h,tagName:x})}}if(g.importStrategy==="component"){const h=D.toHash(t,6),p=c.parse(t);l=`import '../../saltygen/css/${`f_${D.dashCase(p.name)}-${h}.css`}';
|
38
|
+
${l}`}return l=l.replace("@salty-css/react/class-name","@salty-css/react/class-name-client"),l=l.replace("{ styled }","{ styledClient as styled }"),l=l.replace("@salty-css/react/styled","@salty-css/react/styled-client"),l}}catch(i){console.error("Error in minimizeFile:",i)}};exports.compileSaltyFile=Q;exports.generateConfigStyles=ke;exports.generateCss=Ie;exports.generateFile=Ge;exports.isSaltyFile=te;exports.logError=Me;exports.logger=B;exports.minimizeFile=Ke;exports.saltyFileExtensions=re;exports.saltyFileRegExp=Pe;
|
@@ -53,7 +53,7 @@ const Pt = async (t) => {
|
|
53
53
|
tt.error(t);
|
54
54
|
};
|
55
55
|
function Nt(t) {
|
56
|
-
return t ? typeof t != "string" ? Nt(String(t)) : t.replace(/[\
|
56
|
+
return t ? typeof t != "string" ? Nt(String(t)) : t.replace(/[^\d\w]/g, ".") : "";
|
57
57
|
}
|
58
58
|
const It = {
|
59
59
|
/** Set box model to border-box */
|
@@ -127,7 +127,7 @@ const It = {
|
|
127
127
|
if (E.destDir) return E.destDir;
|
128
128
|
const e = await pt(t), s = c(t, (e == null ? void 0 : e.saltygenDir) || "saltygen");
|
129
129
|
return E.destDir = s, s;
|
130
|
-
}, Dt = ["salty", "css", "styles", "styled"],
|
130
|
+
}, Dt = ["salty", "css", "styles", "styled"], Bt = (t = []) => new RegExp(`\\.(${[...Dt, ...t].join("|")})\\.`), ut = (t, e = []) => Bt(e).test(t), kt = async (t) => {
|
131
131
|
if (E.rcFile) return E.rcFile;
|
132
132
|
if (t === "/") throw new Error("Could not find .saltyrc.json file");
|
133
133
|
const e = c(t, ".saltyrc.json"), s = await St(e, "utf-8").then(JSON.parse).catch(() => {
|
@@ -137,7 +137,7 @@ const It = {
|
|
137
137
|
var n, o;
|
138
138
|
const e = await kt(t), s = (n = e.projects) == null ? void 0 : n.find((a) => t.endsWith(a.dir || ""));
|
139
139
|
return s || ((o = e.projects) == null ? void 0 : o.find((a) => a.dir === e.defaultProject));
|
140
|
-
},
|
140
|
+
}, Lt = async (t) => {
|
141
141
|
const e = await pt(t), s = await J(t), n = c(t, (e == null ? void 0 : e.configDir) || "", "salty.config.ts"), o = c(s, "salty.config.js"), a = await Pt(t), i = xt(n);
|
142
142
|
await bt.build({
|
143
143
|
entryPoints: [n],
|
@@ -150,7 +150,7 @@ const It = {
|
|
150
150
|
});
|
151
151
|
const p = Date.now(), { config: y } = await import(`${o}?t=${p}`);
|
152
152
|
return { config: y, path: o };
|
153
|
-
},
|
153
|
+
}, Qt = async (t, e) => {
|
154
154
|
var gt, ht;
|
155
155
|
const s = await J(t), n = {
|
156
156
|
mediaQueries: [],
|
@@ -160,28 +160,28 @@ const It = {
|
|
160
160
|
};
|
161
161
|
await Promise.all(
|
162
162
|
[...e].map(async (w) => {
|
163
|
-
const { contents: S, outputFilePath:
|
163
|
+
const { contents: S, outputFilePath: q } = await st(t, w, s);
|
164
164
|
Object.entries(S).forEach(([V, P]) => {
|
165
|
-
P.isMedia ? n.mediaQueries.push([V, P]) : P.isGlobalDefine ? n.globalStyles.push(P) : P.isDefineVariables ? n.variables.push(P) : P.isDefineTemplates && n.templates.push(P._setPath(`${V};;${
|
165
|
+
P.isMedia ? n.mediaQueries.push([V, P]) : P.isGlobalDefine ? n.globalStyles.push(P) : P.isDefineVariables ? n.variables.push(P) : P.isDefineTemplates && n.templates.push(P._setPath(`${V};;${q}`));
|
166
166
|
});
|
167
167
|
})
|
168
168
|
);
|
169
|
-
const { config: o, path: a } = await
|
169
|
+
const { config: o, path: a } = await Lt(t), i = { ...o }, p = /* @__PURE__ */ new Set(), y = async (w, S = []) => {
|
170
170
|
if (!w) return [];
|
171
|
-
const
|
172
|
-
const
|
171
|
+
const q = Object.entries(w).map(async ([P, z]) => {
|
172
|
+
const Y = async (k) => {
|
173
173
|
if (!k) return;
|
174
|
-
if (k instanceof Promise) return await
|
175
|
-
if (typeof k == "function") return await
|
174
|
+
if (k instanceof Promise) return await Y(await k);
|
175
|
+
if (typeof k == "function") return await Y(await k());
|
176
176
|
if (typeof k == "object") return await y(k, [...S, P]);
|
177
177
|
const ot = Nt(P), at = I(P), it = [...S, ot].join(".");
|
178
178
|
p.add(`"${it}"`);
|
179
|
-
const
|
180
|
-
return wt ? `--${
|
179
|
+
const Z = [...S.map(I), at].join("-"), wt = Ot(k);
|
180
|
+
return wt ? `--${Z}: ${wt.transformed};` : `--${Z}: ${k};`;
|
181
181
|
};
|
182
|
-
return await
|
182
|
+
return await Y(z);
|
183
183
|
});
|
184
|
-
return (await Promise.all(
|
184
|
+
return (await Promise.all(q)).flat();
|
185
185
|
}, m = async (w) => {
|
186
186
|
if (!w) return [];
|
187
187
|
const S = Object.entries(w).map(async ([V, P]) => {
|
@@ -193,8 +193,8 @@ const It = {
|
|
193
193
|
if (!w) return [];
|
194
194
|
const S = Object.entries(w).map(async ([V, P]) => {
|
195
195
|
const z = Object.entries(P).map(async ([k, ot]) => {
|
196
|
-
const at = await y(ot, [V]), it = `.${V}-${k}, [data-${V}="${k}"]`,
|
197
|
-
return `${it} { ${
|
196
|
+
const at = await y(ot, [V]), it = `.${V}-${k}, [data-${V}="${k}"]`, Z = at.join("");
|
197
|
+
return `${it} { ${Z} }`;
|
198
198
|
});
|
199
199
|
return (await Promise.all(z)).flat();
|
200
200
|
});
|
@@ -205,27 +205,27 @@ const It = {
|
|
205
205
|
C(M, `@layer global { ${f} }`);
|
206
206
|
const $ = c(s, "css/_reset.css"), l = o.reset === "none" ? {} : typeof o.reset == "object" ? o.reset : It, F = await lt(l, "");
|
207
207
|
C($, `@layer reset { ${F} }`);
|
208
|
-
const N = c(s, "css/_templates.css"), T = H(o.templates, n.templates), K = await Ct(T),
|
208
|
+
const N = c(s, "css/_templates.css"), T = H(o.templates, n.templates), K = await Ct(T), B = Wt(T);
|
209
209
|
C(N, `@layer templates { ${K} }`), i.templates = T;
|
210
|
-
const
|
211
|
-
i.templatePaths = Object.fromEntries(Object.entries(
|
212
|
-
const { mediaQueries:
|
213
|
-
i.mediaQueries = Object.fromEntries(
|
214
|
-
const
|
210
|
+
const L = o.templates ? [zt(o.templates)._setPath(`config;;${a}`)] : [], A = Jt(n.templates, L);
|
211
|
+
i.templatePaths = Object.fromEntries(Object.entries(A).map(([w, S]) => [w, S._path]));
|
212
|
+
const { mediaQueries: U } = n;
|
213
|
+
i.mediaQueries = Object.fromEntries(U.map(([w, S]) => [`@${w}`, S]));
|
214
|
+
const Q = U.map(([w]) => `'@${w}'`).join(" | "), X = c(s, "types/css-tokens.d.ts"), Tt = `
|
215
215
|
// Variable types
|
216
216
|
type VariableTokens = ${[...p].join("|")};
|
217
217
|
type PropertyValueToken = \`{\${VariableTokens}}\`;
|
218
218
|
|
219
219
|
// Template types
|
220
220
|
type TemplateTokens = {
|
221
|
-
${Object.entries(
|
221
|
+
${Object.entries(B).map(([w, S]) => `${w}?: ${S}`).join(`
|
222
222
|
`)}
|
223
223
|
}
|
224
224
|
|
225
225
|
// Media query types
|
226
|
-
type MediaQueryKeys = ${
|
226
|
+
type MediaQueryKeys = ${Q || "''"};
|
227
227
|
`;
|
228
|
-
C(
|
228
|
+
C(X, Tt);
|
229
229
|
const _t = c(s, "cache/config-cache.json");
|
230
230
|
C(_t, JSON.stringify(i, null, 2));
|
231
231
|
}, $t = (t) => t.replace(/styled\(([^"'`{,]+),/g, (e, s) => {
|
@@ -238,7 +238,7 @@ const It = {
|
|
238
238
|
if (Dt.some((m) => p == null ? void 0 : p.includes(m))) return e;
|
239
239
|
}
|
240
240
|
return "styled('div',";
|
241
|
-
}),
|
241
|
+
}), qt = (t, e) => {
|
242
242
|
try {
|
243
243
|
const s = _(c(e, "saltygen/cache/config-cache.json"), "utf8");
|
244
244
|
return s ? `globalThis.saltyConfig = ${s};
|
@@ -254,7 +254,7 @@ ${t}`;
|
|
254
254
|
ft(o) || G(o);
|
255
255
|
const a = et(e);
|
256
256
|
let i = _(e, "utf8");
|
257
|
-
i = $t(i), i =
|
257
|
+
i = $t(i), i = qt(i, t);
|
258
258
|
const p = c(s, "js", n + ".js"), y = await pt(t), m = c(t, (y == null ? void 0 : y.configDir) || "", "salty.config.ts"), r = xt(m), g = await Pt(t);
|
259
259
|
await bt.build({
|
260
260
|
stdin: {
|
@@ -286,12 +286,12 @@ ${t}`;
|
|
286
286
|
});
|
287
287
|
const u = Date.now();
|
288
288
|
return { contents: await import(`${p}?t=${u}`), outputFilePath: p };
|
289
|
-
},
|
289
|
+
}, At = async (t) => {
|
290
290
|
const e = await J(t), s = c(e, "cache/config-cache.json"), n = _(s, "utf8");
|
291
291
|
if (!n) throw new Error("Could not find config cache file");
|
292
292
|
return JSON.parse(n);
|
293
293
|
}, mt = async (t) => {
|
294
|
-
const e = await
|
294
|
+
const e = await At(t), s = await J(t), n = c(s, "salty.config.js"), o = Date.now(), { config: a } = await import(`${n}?t=${o}`);
|
295
295
|
return H(a, e);
|
296
296
|
}, dt = () => {
|
297
297
|
try {
|
@@ -320,7 +320,7 @@ ${t}`;
|
|
320
320
|
/define[\w\d]+\(/.test(F) && r.add(f);
|
321
321
|
}
|
322
322
|
}
|
323
|
-
await g(t), await
|
323
|
+
await g(t), await Qt(t, r);
|
324
324
|
const u = {
|
325
325
|
keyframes: [],
|
326
326
|
components: [],
|
@@ -399,13 +399,13 @@ ${["_variables.css", "_reset.css", "_global.css", "_templates.css"].filter((f) =
|
|
399
399
|
${j}`;
|
400
400
|
if (h.importStrategy !== "component") {
|
401
401
|
const f = a.reduce(($, b, l) => {
|
402
|
-
const F = b.reduce((
|
403
|
-
var
|
404
|
-
const
|
405
|
-
return
|
406
|
-
/*start:${
|
407
|
-
${
|
408
|
-
/*end:${
|
402
|
+
const F = b.reduce((B, L) => {
|
403
|
+
var X;
|
404
|
+
const A = c(i, "css", L), U = _(A, "utf8"), Q = ((X = /.*-([^-]+)-\d+.css/.exec(L)) == null ? void 0 : X.at(1)) || R(A, 6);
|
405
|
+
return B.includes(Q) ? B : `${B}
|
406
|
+
/*start:${Q}-${L}*/
|
407
|
+
${U}
|
408
|
+
/*end:${Q}*/
|
409
409
|
`;
|
410
410
|
}, ""), N = `l_${l}.css`, T = c(i, "css", N), K = `@layer l${l} { ${F}
|
411
411
|
}`;
|
@@ -516,8 +516,8 @@ ${r}`;
|
|
516
516
|
export {
|
517
517
|
ce as a,
|
518
518
|
le as b,
|
519
|
-
|
520
|
-
|
519
|
+
Bt as c,
|
520
|
+
Qt as d,
|
521
521
|
st as e,
|
522
522
|
re as g,
|
523
523
|
ut as i,
|
package/package.json
CHANGED
package/server/index.cjs
CHANGED
@@ -1 +1 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../should-restart-
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../should-restart-Rq0dgdA1.cjs");exports.checkShouldRestart=e.checkShouldRestart;
|
package/server/index.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import { readFile as r } from "fs/promises";
|
2
|
-
import { i as e } from "./index-
|
2
|
+
import { i as e } from "./index-CplHXohq.js";
|
3
3
|
const c = async (t) => {
|
4
4
|
if (!t || t.includes("node_modules") || t.includes("saltygen")) return !1;
|
5
5
|
if (t.includes("salty.config")) return !0;
|
@@ -1 +1 @@
|
|
1
|
-
"use strict";const e=require("fs/promises"),r=require("./index-
|
1
|
+
"use strict";const e=require("fs/promises"),r=require("./index-BBffxkVO.cjs"),i=async t=>{if(!t||t.includes("node_modules")||t.includes("saltygen"))return!1;if(t.includes("salty.config"))return!0;if(!r.isSaltyFile(t))return!1;const s=await e.readFile(t,"utf-8");return!!/.+define[A-Z]\w+/.test(s)};exports.checkShouldRestart=i;
|
package/index-AIl-HgpW.cjs
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
"use strict";const _e=require("esbuild"),Te=require("child_process"),D=require("./dash-case-BJEkFEGQ.cjs"),r=require("path"),c=require("fs"),he=require("fs/promises"),ee=require("./parse-styles-3N79AOBO.cjs"),G=require("winston"),M=require("./css/merge.cjs"),Oe=require("./define-templates-Cunsb_Tr.cjs"),ae=require("typescript");var re=typeof document<"u"?document.currentScript:null;function Ee(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 we=Ee(_e),Se=async(e,t=[])=>{if(!e)return"";const s=[],n={};for(const[o,i]of Object.entries(e))if(typeof i!="function")if(i&&typeof i=="object"){const a=o.trim(),d=await Se(i,[...t,a]);s.push(d)}else n[o]=i;if(Object.keys(n).length){const o=t.map(D.dashCase).join("-"),i="t_"+D.toHash(o,4),a=await ee.parseAndJoinStyles(n,`.${o}, .${i}`);s.push(a)}return s.join(`
|
2
|
-
`)},ve=e=>e?Object.entries(e).reduce((t,[s,n])=>(typeof n=="function"?t[s]="any":typeof n=="object"&&(t[s]=je(n).map(o=>`"${o}"`).join(" | ")),t),{}):{},je=(e,t="",s=new Set)=>e?(Object.entries(e).forEach(([n,o])=>{const i=t?`${t}.${n}`:n;return typeof o=="object"?je(o,i,s):s.add(t)}),[...s]):[],be=e=>{if(!e||e==="/")throw new Error("Could not find package.json file");const t=r.join(e,"package.json");return c.existsSync(t)?t:be(r.join(e,".."))},Ve=async e=>{const t=be(e);return await he.readFile(t,"utf-8").then(JSON.parse).catch(()=>{})},Re=async e=>{const t=await Ve(e);if(t)return t.type};let q;const $e=async e=>{if(q)return q;const t=await Re(e);return t==="module"?q="esm":(t==="commonjs"||(typeof document>"u"?require("url").pathToFileURL(__filename).href:re&&re.tagName.toUpperCase()==="SCRIPT"&&re.src||new URL("index-AIl-HgpW.cjs",document.baseURI).href).endsWith(".cjs"))&&(q="cjs"),q||"esm"},K=G.createLogger({level:"debug",format:G.format.combine(G.format.colorize(),G.format.cli()),transports:[new G.transports.Console({})]}),Me=e=>{K.error(e)};function Fe(e){return e?typeof e!="string"?Fe(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"}},ze=(e,t)=>new Promise((s,n)=>{const o=setTimeout(()=>{n(new Error("Timeout"))},100),i=ae.createSourceFile("temp.ts",e,ae.ScriptTarget.Latest,!0);function a(d){if(ae.isVariableDeclaration(d)&&d.name.getText()===t){const g=d.getStart(),m=d.getEnd();clearTimeout(o),s([g,m])}d.forEachChild(a)}a(i)}),E={externalModules:[],rcFile:void 0,destDir:void 0},Ce=e=>{if(E.externalModules.length>0)return E.externalModules;const s=c.readFileSync(e,"utf8").match(/externalModules:\s?\[(.*)\]/);if(!s)return[];const n=s[1].split(",").map(o=>o.replace(/['"`]/g,"").trim());return E.externalModules=n,n},J=async e=>{if(E.destDir)return E.destDir;const t=await le(e),s=r.join(e,(t==null?void 0:t.saltygenDir)||"saltygen");return E.destDir=s,s},ce=["salty","css","styles","styled"],Pe=(e=[])=>new RegExp(`\\.(${[...ce,...e].join("|")})\\.`),te=(e,t=[])=>Pe(t).test(e),Ne=async e=>{if(E.rcFile)return E.rcFile;if(e==="/")throw new Error("Could not find .saltyrc.json file");const t=r.join(e,".saltyrc.json"),s=await he.readFile(t,"utf-8").then(JSON.parse).catch(()=>{});return s?(E.rcFile=s,s):Ne(r.join(e,".."))},le=async e=>{var n,o;const t=await Ne(e),s=(n=t.projects)==null?void 0:n.find(i=>e.endsWith(i.dir||""));return s||((o=t.projects)==null?void 0:o.find(i=>i.dir===t.defaultProject))},qe=async e=>{const t=await le(e),s=await J(e),n=r.join(e,(t==null?void 0:t.configDir)||"","salty.config.ts"),o=r.join(s,"salty.config.js"),i=await $e(e),a=Ce(n);await we.build({entryPoints:[n],minify:!0,treeShaking:!0,bundle:!0,outfile:o,format:i,external:a});const d=Date.now(),{config:g}=await import(`${o}?t=${d}`);return{config:g,path:o}},ke=async(e,t)=>{var de,me;const s=await J(e),n={mediaQueries:[],globalStyles:[],variables:[],templates:[]};await Promise.all([...t].map(async S=>{const{contents:$,outputFilePath:A}=await B(e,S,s);Object.entries($).forEach(([O,P])=>{P.isMedia?n.mediaQueries.push([O,P]):P.isGlobalDefine?n.globalStyles.push(P):P.isDefineVariables?n.variables.push(P):P.isDefineTemplates&&n.templates.push(P._setPath(`${O};;${A}`))})}));const{config:o,path:i}=await qe(e),a={...o},d=new Set,g=async(S,$=[])=>{if(!S)return[];const A=Object.entries(S).map(async([P,z])=>{const X=async _=>{if(!_)return;if(_ instanceof Promise)return await X(await _);if(typeof _=="function")return await X(await _());if(typeof _=="object")return await g(_,[...$,P]);const ne=Fe(P),oe=D.dashCase(P),ie=[...$,ne].join(".");d.add(`"${ie}"`);const Y=[...$.map(D.dashCase),oe].join("-"),ye=ee.parseVariableTokens(_);return ye?`--${Y}: ${ye.transformed};`:`--${Y}: ${_};`};return await X(z)});return(await Promise.all(A)).flat()},m=async S=>{if(!S)return[];const $=Object.entries(S).map(async([O,P])=>{const z=await g(P);return O==="base"?z.join(""):`${O} { ${z.join("")} }`});return(await Promise.all($)).flat()},l=async S=>{if(!S)return[];const $=Object.entries(S).map(async([O,P])=>{const z=Object.entries(P).map(async([_,ne])=>{const oe=await g(ne,[O]),ie=`.${O}-${_}, [data-${O}="${_}"]`,Y=oe.join("");return`${ie} { ${Y} }`});return(await Promise.all(z)).flat()});return(await Promise.all($)).flat()},h=S=>({...S,responsive:void 0,conditional:void 0}),p=S=>n.variables.map($=>S==="static"?h($._current):$._current[S]),w=M.mergeObjects(h(o.variables),p("static")),y=await g(w),F=M.mergeObjects((de=o.variables)==null?void 0:de.responsive,p("responsive")),k=await m(F),x=M.mergeObjects((me=o.variables)==null?void 0:me.conditional,p("conditional")),v=await l(x),V=r.join(s,"css/_variables.css"),pe=`:root { ${y.join("")} ${k.join("")} } ${v.join("")}`;c.writeFileSync(V,pe),a.staticVariables=w;const R=r.join(s,"css/_global.css"),se=M.mergeObjects(o.global,n.globalStyles),u=await ee.parseAndJoinStyles(se,"");c.writeFileSync(R,`@layer global { ${u} }`);const j=r.join(s,"css/_reset.css"),f=o.reset==="none"?{}:typeof o.reset=="object"?o.reset:Je,C=await ee.parseAndJoinStyles(f,"");c.writeFileSync(j,`@layer reset { ${C} }`);const N=r.join(s,"css/_templates.css"),T=M.mergeObjects(o.templates,n.templates),H=await Se(T),W=ve(T);c.writeFileSync(N,`@layer templates { ${H} }`),a.templates=T;const I=o.templates?[Oe.defineTemplates(o.templates)._setPath(`config;;${i}`)]:[],Q=M.mergeFactories(n.templates,I);a.templatePaths=Object.fromEntries(Object.entries(Q).map(([S,$])=>[S,$._path]));const{mediaQueries:Z}=n;a.mediaQueries=Object.fromEntries(Z.map(([S,$])=>[`@${S}`,$]));const L=Z.map(([S])=>`'@${S}'`).join(" | "),U=r.join(s,"types/css-tokens.d.ts"),xe=`
|
3
|
-
// Variable types
|
4
|
-
type VariableTokens = ${[...d].join("|")};
|
5
|
-
type PropertyValueToken = \`{\${VariableTokens}}\`;
|
6
|
-
|
7
|
-
// Template types
|
8
|
-
type TemplateTokens = {
|
9
|
-
${Object.entries(W).map(([S,$])=>`${S}?: ${$}`).join(`
|
10
|
-
`)}
|
11
|
-
}
|
12
|
-
|
13
|
-
// Media query types
|
14
|
-
type MediaQueryKeys = ${L||"''"};
|
15
|
-
`;c.writeFileSync(U,xe);const De=r.join(s,"cache/config-cache.json");c.writeFileSync(De,JSON.stringify(a,null,2))},ge=e=>e.replace(/styled\(([^"'`{,]+),/g,(t,s)=>{if(/^['"`]/.test(s))return t;const o=new RegExp(`import[^;]*${s}[,\\s{][^;]*from\\s?([^{};]+);`);if(!o.test(e))return t;const a=o.exec(e);if(a){const d=a.at(1);if(ce.some(m=>d==null?void 0:d.includes(m)))return t}return"styled('div',"}),He=(e,t)=>{try{const s=c.readFileSync(r.join(t,"saltygen/cache/config-cache.json"),"utf8");return s?`globalThis.saltyConfig = ${s};
|
16
|
-
|
17
|
-
${e}`:`globalThis.saltyConfig = {};
|
18
|
-
|
19
|
-
${e}`}catch{return e}},B=async(e,t,s)=>{const n=D.toHash(t),o=r.join(s,"./temp");c.existsSync(o)||c.mkdirSync(o);const i=r.parse(t);let a=c.readFileSync(t,"utf8");a=ge(a),a=He(a,e);const d=r.join(s,"js",n+".js"),g=await le(e),m=r.join(e,(g==null?void 0:g.configDir)||"","salty.config.ts"),l=Ce(m),h=await $e(e);await we.build({stdin:{contents:a,sourcefile:i.base,resolveDir:i.dir,loader:"tsx"},minify:!1,treeShaking:!0,bundle:!0,outfile:d,format:h,target:["node20"],keepNames:!0,external:l,packages:"external",plugins:[{name:"test",setup:y=>{y.onLoad({filter:/.*\.css|salty|styles|styled\.ts/},F=>{const k=c.readFileSync(F.path,"utf8");return{contents:ge(k),loader:"ts"}})}}]});const p=Date.now();return{contents:await import(`${d}?t=${p}`),outputFilePath:d}},We=async e=>{const t=await J(e),s=r.join(t,"cache/config-cache.json"),n=c.readFileSync(s,"utf8");if(!n)throw new Error("Could not find config cache file");return JSON.parse(n)},fe=async e=>{const t=await We(e),s=await J(e),n=r.join(s,"salty.config.js"),o=Date.now(),{config:i}=await import(`${n}?t=${o}`);return M.mergeObjects(i,t)},ue=()=>{try{return process.env.NODE_ENV==="production"}catch{return!1}},Ie=async(e,t=ue(),s=!0)=>{try{const n=Date.now();t?K.info("Generating CSS in production mode! 🔥"):K.info("Generating CSS in development mode! 🚀");const o=[],i=[],a=await J(e),d=r.join(a,"index.css");s&&(()=>{c.existsSync(a)&&Te.execSync("rm -rf "+a),c.mkdirSync(a,{recursive:!0}),c.mkdirSync(r.join(a,"css")),c.mkdirSync(r.join(a,"types")),c.mkdirSync(r.join(a,"js")),c.mkdirSync(r.join(a,"cache"))})();const m=new Set,l=new Set;async function h(u){const j=["node_modules","saltygen"],b=c.statSync(u);if(b.isDirectory()){const f=c.readdirSync(u);if(j.some(N=>u.includes(N)))return;await Promise.all(f.map(N=>h(r.join(u,N))))}else if(b.isFile()&&te(u)){m.add(u);const C=c.readFileSync(u,"utf8");/define[\w\d]+\(/.test(C)&&l.add(u)}}await h(e),await ke(e,l);const p={keyframes:[],components:[],classNames:[]};await Promise.all([...m].map(async u=>{const{contents:j}=await B(e,u,a);for(let[b,f]of Object.entries(j))f instanceof Promise&&(f=await f),f.isKeyframes?p.keyframes.push({value:f,src:u,name:b}):f.isClassName?p.classNames.push({...f,src:u,name:b}):f.generator&&p.components.push({...f,src:u,name:b})}));const w=await fe(e);for(const u of p.keyframes){const{value:j}=u,b=`a_${j.animationName}.css`,f=`css/${b}`,C=r.join(a,f);o.push(b),c.writeFileSync(C,j.css)}const y={};for(const u of p.components){const{src:j,name:b}=u;y[j]||(y[j]=[]);const f=u.generator._withBuildContext({callerName:b,isProduction:t,config:w});i[f.priority]||(i[f.priority]=[]);const C=await f.css;if(!C)continue;i[f.priority].push(f.cssFileName);const N=`css/${f.cssFileName}`,T=r.join(a,N);c.writeFileSync(T,C),w.importStrategy==="component"&&y[j].push(f.cssFileName)}for(const u of p.classNames){const{src:j,name:b}=u;y[j]||(y[j]=[]);const f=u.generator._withBuildContext({callerName:b,isProduction:t,config:w}),C=await f.css;if(!C)continue;i[f.priority]||(i[f.priority]=[]),i[f.priority].push(f.cssFileName);const N=`css/${f.cssFileName}`,T=r.join(a,N);c.writeFileSync(T,C),w.importStrategy==="component"&&y[j].push(f.cssFileName)}w.importStrategy==="component"&&Object.entries(y).forEach(([u,j])=>{const b=j.map(H=>`@import url('./${H}');`).join(`
|
20
|
-
`),f=D.toHash(u,6),C=r.parse(u),N=D.dashCase(C.name),T=r.join(a,`css/f_${N}-${f}.css`);c.writeFileSync(T,b||"/* Empty file */")});const F=o.map(u=>`@import url('./css/${u}');`).join(`
|
21
|
-
`);let V=`@layer reset, global, templates, l0, l1, l2, l3, l4, l5, l6, l7, l8;
|
22
|
-
|
23
|
-
${["_variables.css","_reset.css","_global.css","_templates.css"].filter(u=>{try{return c.readFileSync(r.join(a,"css",u),"utf8").length>0}catch{return!1}}).map(u=>`@import url('./css/${u}');`).join(`
|
24
|
-
`)}
|
25
|
-
${F}`;if(w.importStrategy!=="component"){const u=i.reduce((j,b,f)=>{const C=b.reduce((W,I)=>{var U;const Q=r.join(a,"css",I),Z=c.readFileSync(Q,"utf8"),L=((U=/.*-([^-]+)-\d+.css/.exec(I))==null?void 0:U.at(1))||D.toHash(Q,6);return W.includes(L)?W:`${W}
|
26
|
-
/*start:${L}-${I}*/
|
27
|
-
${Z}
|
28
|
-
/*end:${L}*/
|
29
|
-
`},""),N=`l_${f}.css`,T=r.join(a,"css",N),H=`@layer l${f} { ${C}
|
30
|
-
}`;return c.writeFileSync(T,H),`${j}
|
31
|
-
@import url('./css/${N}');`},"");V+=u}c.writeFileSync(d,V);const R=Date.now()-n,se=R<200?"🔥":R<500?"🚀":R<1e3?"🎉":R<2e3?"🚗":R<5e3?"🤔":"🥴";K.info(`Generated CSS in ${R}ms! ${se}`)}catch(n){console.error(n)}},Le=async(e,t,s=ue())=>{try{const n=await J(e);if(te(t)){const i=[],a=await fe(e),{contents:d}=await B(e,t,n);for(const[g,m]of Object.entries(d)){if(m.isKeyframes&&m.css){const F=`css/${`a_${m.animationName}.css`}`,k=r.join(n,F);c.writeFileSync(k,await m.css);return}if(m.isClassName){const y=m.generator._withBuildContext({callerName:g,isProduction:s,config:a}),F=await y.css;if(!F)continue;i[y.priority]||(i[y.priority]=[]),i[y.priority].push(y.cssFileName);const k=`css/${y.cssFileName}`,x=r.join(n,k);c.writeFileSync(x,F)}if(!m.generator)return;const l=m.generator._withBuildContext({callerName:g,isProduction:s,config:a}),h=await l.css;if(!h)continue;const p=`css/${l.cssFileName}`,w=r.join(n,p);c.writeFileSync(w,h),i[l.priority]||(i[l.priority]=[]),i[l.priority].push(l.cssFileName)}if(a.importStrategy!=="component")i.forEach((g,m)=>{const l=`l_${m}.css`,h=r.join(n,"css",l);let p=c.readFileSync(h,"utf8");g.forEach(w=>{var x;const y=r.join(n,"css",w),F=((x=/.*-([^-]+)-\d+.css/.exec(w))==null?void 0:x.at(1))||D.toHash(y,6);if(!p.includes(F)){const v=c.readFileSync(y,"utf8"),V=`/*start:${F}-${w}*/
|
32
|
-
${v}
|
33
|
-
/*end:${F}*/
|
34
|
-
`;p=`${p.replace(/\}$/,"")}
|
35
|
-
${V}
|
36
|
-
}`}}),c.writeFileSync(h,p)});else{const g=i.flat().map(w=>`@import url('./${w}');`).join(`
|
37
|
-
`),m=D.toHash(t,6),l=r.parse(t),h=D.dashCase(l.name),p=r.join(n,`css/f_${h}-${m}.css`);c.writeFileSync(p,g||"/* Empty file */")}}}catch(n){console.error(n)}},Ae=async(e,t,s=ue())=>{var n,o;try{const i=await J(e);if(te(t)){const d=c.readFileSync(t,"utf8"),g=await fe(e),{contents:m}=await B(e,t,i);let l=d;for(const[h,p]of Object.entries(m)){if(p.isKeyframes||!p.generator)continue;const w=p.generator._withBuildContext({callerName:h,isProduction:s,config:g}),[y,F]=await ze(l,h),k=l.slice(y,F);if(p.isClassName){const x=l,v=` ${h} = className("${w.classNames}")`;l=l.replace(k,v),x===l&&console.error("Minimize file failed to change content",{name:h})}if(k.includes("styled")){const x=(o=(n=/styled\(([^,]+),/.exec(k))==null?void 0:n.at(1))==null?void 0:o.trim(),v=l,V=` ${h} = styled(${x}, "${w.classNames}", ${JSON.stringify(w.clientProps)})`;l=l.replace(k,V),v===l&&console.error("Minimize file failed to change content",{name:h,tagName:x})}}if(g.importStrategy==="component"){const h=D.toHash(t,6),p=r.parse(t);l=`import '../../saltygen/css/${`f_${D.dashCase(p.name)}-${h}.css`}';
|
38
|
-
${l}`}return l=l.replace("@salty-css/react/class-name","@salty-css/react/class-name-client"),l=l.replace("{ styled }","{ styledClient as styled }"),l=l.replace("@salty-css/react/styled","@salty-css/react/styled-client"),l}}catch(i){console.error("Error in minimizeFile:",i)}};exports.compileSaltyFile=B;exports.generateConfigStyles=ke;exports.generateCss=Ie;exports.generateFile=Le;exports.isSaltyFile=te;exports.logError=Me;exports.logger=K;exports.minimizeFile=Ae;exports.saltyFileExtensions=ce;exports.saltyFileRegExp=Pe;
|