@salty-css/core 0.4.5-alpha.0 → 0.4.5-fix-cli-astro-salty-config-dir.1
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/dist/bin/commands/init.d.ts.map +1 -1
- package/dist/bin/index.cjs +1 -1
- package/dist/bin/index.js +1 -1
- package/dist/bin/main.cjs +1 -1
- package/dist/bin/main.js +1 -1
- package/dist/bin/templates.d.ts +1 -2
- package/dist/bin/templates.d.ts.map +1 -1
- package/dist/compiler/salty-compiler.cjs +1 -1
- package/dist/compiler/salty-compiler.js +1 -1
- package/dist/main-BewK1FlN.cjs +11 -0
- package/dist/{main-v3rdDsFh.js → main-CdPEqB9e.js} +89 -93
- package/dist/{salty-compiler-1LbXg6lw.cjs → salty-compiler-KFQvi4nM.cjs} +1 -1
- package/dist/{salty-compiler-u42y07vy.js → salty-compiler-f2GWfsa1.js} +1 -1
- package/dist/{saltygen_index-BoZSUsyA.js → templates-DWWLjEiU.js} +1 -1
- package/package.json +1 -1
- package/dist/main-BoqRA5gm.cjs +0 -11
- package/dist/maybe.d.ts +0 -2
- package/dist/maybe.d.ts.map +0 -1
- package/dist/styles_index-CYo48NLy.js +0 -4
- package/dist/styles_index-DgmdjfFo.cjs +0 -1
- /package/dist/{saltygen_index-BGHLaAOm.cjs → templates-BGHLaAOm.cjs} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0EpC,eAAO,MAAM,mBAAmB,GAAI,SAAS,OAAO,KAAG,IAgEtD,CAAC"}
|
package/dist/bin/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
require("../main-
|
|
2
|
+
require("../main-BewK1FlN.cjs").t().catch(e=>console.error(e));
|
package/dist/bin/index.js
CHANGED
package/dist/bin/main.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../main-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../main-BewK1FlN.cjs");exports.main=e.t;
|
package/dist/bin/main.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "../main-
|
|
1
|
+
import { t as e } from "../main-CdPEqB9e.js";
|
|
2
2
|
export { e as main };
|
package/dist/bin/templates.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
declare const templateLoaders: {
|
|
2
2
|
readonly 'salty.config.ts': () => Promise<typeof import("*__template")>;
|
|
3
|
-
readonly 'styles/index.css': () => Promise<typeof import("*__template")>;
|
|
4
3
|
readonly 'saltygen/index.css': () => Promise<typeof import("*__template")>;
|
|
5
4
|
readonly 'react/styled-file.ts': () => Promise<typeof import("*__template")>;
|
|
6
5
|
readonly 'react/vanilla-file.ts': () => Promise<typeof import("*__template")>;
|
|
@@ -9,7 +8,7 @@ declare const templateLoaders: {
|
|
|
9
8
|
};
|
|
10
9
|
export type TemplateKey = keyof typeof templateLoaders;
|
|
11
10
|
export declare const readTemplate: <T extends object>(key: TemplateKey, options?: T) => Promise<{
|
|
12
|
-
fileName: "salty.config.ts" | "
|
|
11
|
+
fileName: "salty.config.ts" | "saltygen/index.css" | "react/styled-file.ts" | "react/vanilla-file.ts" | "astro/styled-file.ts" | "astro/component.astro";
|
|
13
12
|
content: string;
|
|
14
13
|
}>;
|
|
15
14
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/bin/templates.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/bin/templates.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,eAAe;;;;;;;CAOX,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,eAAe,CAAC;AAEvD,eAAO,MAAM,YAAY,GAAU,CAAC,SAAS,MAAM,EAAE,KAAK,WAAW,EAAE,UAAU,CAAC;;;EAIjF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../salty-compiler-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../salty-compiler-KFQvi4nM.cjs");exports.SaltyCompiler=e.t;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "../salty-compiler-
|
|
1
|
+
import { t as e } from "../salty-compiler-f2GWfsa1.js";
|
|
2
2
|
export { e as SaltyCompiler };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const e=require("./chunk-CMqjfN_6.cjs"),t=require("./salty-compiler-KFQvi4nM.cjs"),n=require("./compiler/helpers.cjs"),r=require("./util/index.cjs"),i=require("./server/index.cjs");let a=require("commander"),o=require("fs"),s=require("path"),c=require("fs/promises"),l=require("child_process"),u=require("ora");u=e.t(u,1);let d=require("ejs");d=e.t(d,1);let f=require("readline/promises");var p=(0,s.join)(process.cwd(),`package.json`),m=async(e=p)=>{let t=await(0,c.readFile)(e,`utf-8`).then(JSON.parse).catch(()=>void 0);if(!t)throw`Could not read package.json file!`;return t},h=async(e,t=p)=>{typeof e==`object`&&(e=JSON.stringify(e,null,2)),await(0,c.writeFile)(t,e)},g=async()=>m(new URL(`../package.json`,``+{}.url)),_={core:e=>`@salty-css/core@${e}`,eslintConfigCore:e=>`@salty-css/eslint-config-core@${e}`},v=e=>{e.scripts||={};let t=e.scripts.prepare;if(t){if(t.includes(`salty-css`))return{changed:!1,pkg:e};e.scripts.prepare=t+` && npx salty-css build`}else e.scripts.prepare=`npx salty-css build`;return{changed:!0,pkg:e}},y=e=>new Promise((t,n)=>{(0,l.exec)(e,e=>{if(e)return n(e);t()})}),b=async(...e)=>{let t=e.map(e=>e.replace(`-D`,``).split(`@`).slice(0,-1).join(`@`).trim()).join(`, `),n=(0,u.default)(`Installing packages: ${t}`).start();await y(`npm install ${e.join(` `)}`),n.succeed(`Installed packages: ${t}`)},x=()=>(0,o.existsSync)((0,s.join)(process.cwd(),`node_modules`,`.bin`,`prettier`));async function S(e){try{if(!x())return;await y(`./node_modules/.bin/prettier --write "${e}"`),t.r.info(`Formatted ${e} with Prettier`)}catch(n){t.r.error(`Error formatting ${e} with Prettier:`,n)}}var C=(e=process.cwd())=>(0,s.join)(e,`.saltyrc.json`),w=async(e=process.cwd())=>await(0,c.readFile)(C(e),`utf-8`).then(JSON.parse).catch(()=>({})),T=async(e=process.cwd())=>(0,c.readFile)(C(e),`utf-8`).catch(()=>void 0),E=async(e=process.cwd())=>(await w(e)).defaultProject,D=(e,t,n,r={})=>{let i=(0,s.join)(t,n.srcDirectory),a={dir:i,framework:n.name,...r};if(e===void 0)return{content: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:i,projects:[a]},null,2),changed:!0,created:!0};let o=JSON.parse(e),c=o.projects||[];if(c.some(e=>e.dir===i))return{content:e,changed:!1,created:!1};c.push(a),o.projects=[...c];let l=JSON.stringify(o,null,2);return{content:l,changed:l!==e,created:!1}},O=async(e,n,r,i={})=>{let a=C(e),{content:o,changed:s,created:l}=D(await T(e),n,r,i);return s?(l?t.r.info(`Creating file: `+a):t.r.info(`Edit file: `+a),await(0,c.writeFile)(a,o),await S(a),!0):!1},ee=(e,t)=>(e.projects||[]).find(e=>e.dir===t)?.framework,k=(e,t=process.cwd())=>(0,s.join)(t,e===`.`?``:e),A=async e=>{let t=process.cwd(),n=k(e.dir,t),r=(0,s.relative)(t,n)||`.`,i=await m().catch(()=>void 0);if(e.requirePackageJson!==!1&&!i)throw Error(`Salty CSS project must be initialized in a directory with a package.json file.`);return{cwd:t,projectDir:n,relativeProjectPath:r,packageJson:i,rcFile:await w(t),cliVersion:(await g()).version||`0.0.0`,skipInstall:!!e.skipInstall,yes:!!e.yes}},j=(e,r)=>{e.command(`build [directory]`).alias(`b`).description(`Build the Salty-CSS project.`).option(`-d, --dir <dir>`,`Project directory to build the project in.`).option(`--watch`,`Watch for changes and rebuild the project.`).option(`--mode <mode>`,`Build mode: "production" or "development". Defaults to NODE_ENV-based detection.`).action(async function(e=r){t.r.info(`Building the Salty-CSS project...`);let{dir:a=e,watch:s,mode:c}=this.opts();if(c!==void 0&&c!==`production`&&c!==`development`)return t.n(`Invalid --mode "${c}". Expected "production" or "development".`);let l=a??await E();if(!l)return t.n(`Project directory must be provided. Add it as the first argument after build command or use the --dir option.`);let u=k(l),d=new t.t(u,{mode:c});await d.generateCss(),s&&(t.r.info(`Watching for changes in the project directory...`),(0,o.watch)(u,{recursive:!0},async(e,t)=>{if(!t)return console.warn(`File path not provided for change event`);await i.checkShouldRestart(t)?await d.generateCss(!1):n.isSaltyFile(t)&&await d.generateFile(t)}))})},M=[`astro.config.mjs`,`astro.config.ts`,`astro.config.js`,`astro.config.cjs`],N=e=>{for(let t of M){let n=(0,s.join)(e,t);if((0,o.existsSync)(n))return n}return null},te=e=>{let t=e.packageJson;if(!t)return!1;let n={...t.dependencies,...t.devDependencies};return Object.prototype.hasOwnProperty.call(n,`astro`)},P={name:`astro`,srcDirectory:`src`,detect:e=>!!N(e.projectDir)||te(e),runtimePackage:e=>`@salty-css/astro@${e}`,templates:{styled:`astro/styled-file.ts`,component:{styled:`astro/styled-file.ts`,wrapper:`astro/component.astro`,wrapperExt:`.astro`}}},F={name:`react`,srcDirectory:``,detect:()=>!0,runtimePackage:e=>`@salty-css/react@${e}`,templates:{styled:`react/styled-file.ts`,component:{styled:`react/styled-file.ts`,wrapper:`react/vanilla-file.ts`,wrapperExt:`.tsx`}}},I=[P,F],L={astro:P,react:F},R=async e=>{for(let t of I)if(await t.detect(e))return t;return F},z=e=>{if(e)return L[e]},B={"salty.config.ts":()=>Promise.resolve().then(()=>require("./salty.config-B0ZiRpHR.cjs")),"saltygen/index.css":()=>Promise.resolve().then(()=>require("./templates-BGHLaAOm.cjs")),"react/styled-file.ts":()=>Promise.resolve().then(()=>require("./styled-file-BCbAEzBB.cjs")),"react/vanilla-file.ts":()=>Promise.resolve().then(()=>require("./vanilla-file-Z3VsOa_U.cjs")),"astro/styled-file.ts":()=>Promise.resolve().then(()=>require("./styled-file-DorArlCk.cjs")),"astro/component.astro":()=>Promise.resolve().then(()=>require("./astro-component-r0qEcF1p.cjs"))},V=async(e,t)=>{let{default:n}=await B[e]();return{fileName:e,content:d.default.render(n,t)}},H=(e,n)=>{e.command(`generate [file] [directory]`).alias(`g`).description(`Generate a new component file.`).option(`-f, --file <file>`,`File to generate.`).option(`-d, --dir <dir>`,`Project directory to generate the file in.`).option(`-t, --tag <tag>`,`HTML tag of the component.`,`div`).option(`-n, --name <name>`,`Name of the component.`).option(`-c, --className <className>`,`CSS class of the component.`).option(`-r, --reactComponent`,`Generate a wrapper component file alongside the styled definition.`).action(async function(e,i=n){let{file:a=e,dir:o=i,tag:l,name:u,className:d,reactComponent:f=!1}=this.opts();if(!a)return t.n(`File to generate must be provided. Add it as the first argument after generate command or use the --file option.`);if(!o)return t.n(`Project directory must be provided. Add it as the second argument after generate command or use the --dir option.`);let p;try{p=await A({dir:o,requirePackageJson:!1})}catch(e){return t.n(e instanceof Error?e.message:String(e))}let m=z(ee(p.rcFile,p.relativeProjectPath))??await R(p),h=a.split(`/`).slice(0,-1).join(`/`);h&&await(0,c.mkdir)((0,s.join)(p.projectDir,h),{recursive:!0});let g=(0,s.parse)((0,s.join)(p.projectDir,a));g.ext||=`.ts`,g.name.endsWith(`.css`)||(g.name+=`.css`),g.base=g.name+g.ext;let _=(0,s.format)(g);if(await(0,c.readFile)(_,`utf-8`).catch(()=>void 0)!==void 0){t.r.error(`File already exists: `+_);return}let v=r.pascalCase(u||g.base.replace(/\.css\.\w+$/,``));if(f){if(!m.templates.component)return t.n(`--reactComponent is not supported for the ${m.name} framework.`);let e=v+`Component`;v+=`Wrapper`;let n=g.base.replace(/\.css\.\w+$/,``),{content:r}=await V(m.templates.component.wrapper,{tag:l,componentName:e,styledComponentName:v,className:d,fileName:n});g.name=n.replace(/\.css$/,``),g.ext=m.templates.component.wrapperExt,g.base=g.name+g.ext;let i=(0,s.format)(g);t.r.info(`Generating a new file: `+i),await(0,c.writeFile)(i,r),await S(i)}let{content:y}=await V(f&&m.templates.component?m.templates.component.styled:m.templates.styled,{tag:l,name:v,className:d});t.r.info(`Generating a new file: `+_),await(0,c.writeFile)(_,y),await S(_)})},U=e=>{let t=e.trim();return t.startsWith(`-D `)?`${t.slice(3).trim()} (dev)`:t},W=e=>e.map(e=>` + ${U(e)}`).join(`
|
|
2
|
+
`),G=async(e,t,n={})=>{if(t||e.length===0)return;let r=n.input??process.stdin,i=n.output??process.stdout;if(!(n.isTTY??process.stdin.isTTY??!1))throw Error(`Cannot prompt for install confirmation: stdin is not a TTY. Re-run with --yes to install the listed packages without prompting.`);i.write(`The following packages will be installed:\n${W(e)}\n`);let a=(0,f.createInterface)({input:r,output:i,terminal:!1});try{let e=(await a.question(`Proceed? (y/N) `)).trim().toLowerCase();if(e!==`y`&&e!==`yes`)throw Error(`Install cancelled by user.`)}finally{a.close()}},K=async(e,t={})=>{if(t.yes)return!0;let n=t.input??process.stdin,r=t.output??process.stdout;if(!(t.isTTY??process.stdin.isTTY??!1))return!1;let i=t.defaultYes?`(Y/n)`:`(y/N)`,a=(0,f.createInterface)({input:n,output:r,terminal:!1});try{let n=(await a.question(`${e} ${i} `)).trim().toLowerCase();return n===``?!!t.defaultYes:n===`y`||n===`yes`}finally{a.close()}},q=[`src`,`public`,`assets`,`styles`,`css`,`app`],J=[`styles`,`css`,`app`,`pages`],Y=[`index`,`styles`,`main`,`app`,`global`,`globals`],X=[`.css`,`.scss`,`.sass`],Z=async e=>{for(let t of q)for(let n of Y)for(let r of X){let i=(0,s.join)(e,t,n+r);if(await(0,c.readFile)(i,`utf-8`).catch(()=>void 0)!==void 0)return(0,s.relative)(e,i);for(let i of J){let a=(0,s.join)(e,t,i,n+r);if(await(0,c.readFile)(a,`utf-8`).catch(()=>void 0)!==void 0)return(0,s.relative)(e,a)}}},Q=e=>`@salty-css/astro@${e}`,ne=`import saltyIntegration from '@salty-css/astro/integration';
|
|
3
|
+
`,re=e=>{if(e.includes(`@salty-css/astro`))return{content:null};let t=e,n=!1;return/integrations\s*:\s*\[/.test(t)?(t=t.replace(/integrations\s*:\s*\[/,e=>`${e}saltyIntegration(),`),n=!0):/defineConfig\s*\(\s*\{/.test(t)&&(t=t.replace(/defineConfig\s*\(\s*\{/,e=>`${e}\n integrations: [saltyIntegration()],`),n=!0),n?{content:ne+t}:{content:null,warning:`Could not find a place to add saltyIntegration() in the Astro config. Please add it manually.`}},ie={name:`astro`,detect:e=>N(e.projectDir),plan:async(e,n)=>{let r=await(0,c.readFile)(n,`utf-8`).catch(()=>void 0);if(r===void 0)return null;let i=re(r);if(i.warning&&t.r.warn(i.warning),i.content===null)return null;let a=i.content;return{packages:[`-D ${Q(e.cliVersion)}`],execute:async()=>(t.r.info(`Adding Salty-CSS integration to Astro config: `+n),await(0,c.writeFile)(n,a),await S(n),{changed:!0})}}},ae=[[`projectJs`,`eslint.config.js`],[`rootJs`,`eslint.config.js`],[`projectMjs`,`eslint.config.mjs`],[`rootMjs`,`eslint.config.mjs`],[`projectJson`,`.eslintrc.json`],[`rootJson`,`.eslintrc.json`]],oe=(e,t)=>ae.map(([n,r])=>(0,s.join)(n.startsWith(`root`)?t:e,r)),se=(e,t)=>{if(e.includes(`salty-css`))return{content:null};if(t){let t=`import saltyCss from "@salty-css/eslint-config-core/flat";\n${e}`;if(e.includes(`typescript-eslint`))if(t.includes(`.config(`))t=t.replace(`.config(`,`.config(saltyCss,`);else return{content:null,warning:`Could not find the correct place to add the Salty-CSS config for ESLint. Please add it manually.`};else if(t.includes(`export default [`))t=t.replace(`export default [`,`export default [ saltyCss,`);else if(t.includes(`eslintConfig = [`))t=t.replace(`eslintConfig = [`,`eslintConfig = [ saltyCss,`);else return{content:null,warning:`Could not find the correct place to add the Salty-CSS config for ESLint. Please add it manually.`};return{content:t}}let n=JSON.parse(e);return n.extends||=[],n.extends.includes(`@salty-css/core`)||n.extends.push(`@salty-css/core`),{content:JSON.stringify(n,null,2)}},ce={name:`eslint`,detect:e=>oe(e.projectDir,e.cwd).find(e=>(0,o.existsSync)(e))??null,plan:async(e,n)=>{let r=await(0,c.readFile)(n,`utf-8`).catch(()=>void 0);if(r===void 0)return t.r.error(`Could not read ESLint config file.`),null;let i=se(r,n.endsWith(`js`));if(i.warning&&t.r.warn(i.warning),i.content===null)return null;let a=i.content;return{packages:[_.eslintConfigCore(e.cliVersion)],execute:async()=>(t.r.info(`Edit file: `+n),await(0,c.writeFile)(n,a),await S(n),{changed:!0})}}},le=[`next.config.js`,`next.config.cjs`,`next.config.ts`,`next.config.mjs`],ue=e=>`@salty-css/next@${e}`,de=e=>{if(e.includes(`withSaltyCss`))return{content:null};let t=e,n=!1;/\splugins([^=]*)=[^[]\[/.test(t)&&(t=t.replace(/\splugins([^=]*)=[^[]\[/,(e,t)=>` plugins${t}= [withSaltyCss,`),n=!0);let r=t.includes(`module.exports`),i=r?`const { withSaltyCss } = require('@salty-css/next');
|
|
4
|
+
`:`import { withSaltyCss } from '@salty-css/next';
|
|
5
|
+
`;return r&&!n?(t=t.replace(/module.exports = ([^;]+)/,(e,t)=>`module.exports = withSaltyCss(${t})`),n=!0):n||(t=t.replace(/export default ([^;]+)/,(e,t)=>`export default withSaltyCss(${t})`)),{content:i+t}},fe={name:`next`,detect:e=>le.map(t=>(0,s.join)(e.projectDir,t)).find(e=>(0,o.existsSync)(e))??null,plan:async(e,n)=>{let r=await(0,c.readFile)(n,`utf-8`).catch(()=>void 0);if(r===void 0)return null;let{content:i}=de(r);return i===null?null:{packages:[`-D ${ue(e.cliVersion)}`],execute:async()=>(t.r.info(`Adding Salty-CSS plugin to Next.js config...`),await(0,c.writeFile)(n,i),await S(n),{changed:!0})}}},pe=e=>`@salty-css/vite@${e}`,me=e=>e.includes(`saltyPlugin`)?{content:null}:{content:`import { saltyPlugin } from '@salty-css/vite';
|
|
6
|
+
`+e.replace(/(plugins: \[)/,`$1
|
|
7
|
+
saltyPlugin(__dirname),`)},he=[ce,{name:`vite`,detect:e=>{let t=(0,s.join)(e.projectDir,`vite.config.ts`);return(0,o.existsSync)(t)?t:null},plan:async(e,n)=>{let r=await(0,c.readFile)(n,`utf-8`).catch(()=>void 0);if(r===void 0)return null;let{content:i}=me(r);return i===null?null:{packages:[`-D ${pe(e.cliVersion)}`],execute:async()=>(t.r.info(`Edit file: `+n),t.r.info(`Adding Salty-CSS plugin to Vite config...`),await(0,c.writeFile)(n,i),await S(n),{changed:!0})}}},fe,ie],ge=async e=>{let t=[];for(let n of he){let r=await n.detect(e);if(!r)continue;let i=await n.plan(e,r);i&&t.push({name:n.name,configPath:r,plan:i})}return t},_e=async e=>{let t=[];for(let{name:n,configPath:r,plan:i}of e){let e=await i.execute();t.push({name:n,configPath:r,changed:e.changed})}return t},ve={vite:[`dist/**`],next:[`.next/**`,`out/**`]},ye=({framework:e,integrations:t,hasSrcDir:n})=>{if(e===`astro`)return{};let r=[...new Set(t.flatMap(e=>ve[e]??[]))],i={};return n&&(i.include=[`src/**`]),r.length&&(i.exclude=r),i},be=async(e,n,r)=>{let i=(0,s.join)(e,n);if((0,o.existsSync)(i)){t.r.debug(`File already exists: `+i);return}let a=n.split(`/`).slice(0,-1).join(`/`);a&&await(0,c.mkdir)((0,s.join)(e,a),{recursive:!0}),t.r.info(`Creating file: `+i),await(0,c.writeFile)(i,r),await S(i)},xe=async e=>{let n=(0,s.join)(e,`.gitignore`),r=await(0,c.readFile)(n,`utf-8`).catch(()=>void 0);r!==void 0&&(r.includes(`saltygen`)||(t.r.info(`Edit file: `+n),await(0,c.writeFile)(n,r+`
|
|
8
|
+
|
|
9
|
+
# Salty-CSS
|
|
10
|
+
saltygen
|
|
11
|
+
`)))},Se=async(e,n)=>{let r=n??await Z(e);if(!r){t.r.warn(`Could not find a CSS file to import the generated CSS. Please add it manually.`);return}let i=(0,s.join)(e,r),a=await(0,c.readFile)(i,`utf-8`).catch(()=>void 0);if(a===void 0||a.includes(`saltygen`))return;let o=(0,s.relative)((0,s.join)(i,`..`),(0,s.join)(e,`saltygen/index.css`));t.r.info(`Adding global import statement to CSS file: `+i),await(0,c.writeFile)(i,`@import '${o}';\n`+a),await S(i)},Ce=async()=>{let e=await m().catch(()=>{t.n(`Could not read package.json file.`)});if(!e)return;let{pkg:n}=v(e);await h(n)},we=e=>{e.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.`).option(`-y, --yes`,`Skip the install confirmation prompt.`).action(async function(e=`.`){try{let n=this.opts(),r=n.dir??e;if(!r)return t.n(`Project directory must be provided. Add it as the first argument after init command or use the --dir option.`);let i=await A({dir:r,skipInstall:n.skipInstall,yes:n.yes});t.r.info(`Initializing a new Salty-CSS project!`);let a=await R(i);t.r.info(`Detected framework: ${a.name}`);let l=await ge(i);if(!i.skipInstall){let e=[_.core(i.cliVersion),a.runtimePackage(i.cliVersion),...l.flatMap(e=>e.plan.packages)];await G(e,i.yes),await b(...e)}let u=await Promise.all([V(`salty.config.ts`),V(`saltygen/index.css`)]);await(0,c.mkdir)(i.projectDir,{recursive:!0});let d=(0,s.join)(i.projectDir,a.srcDirectory);await Promise.all(u.map(({fileName:e,content:t})=>be(d,e,t)));let f=ye({framework:a.name,integrations:l.map(e=>e.name),hasSrcDir:(0,o.existsSync)((0,s.join)(i.projectDir,`src`))});await O(i.cwd,i.relativeProjectPath,a,f),await xe(i.cwd),await Se(i.projectDir,n.cssFile),await _e(l),await Ce(),t.r.info(`Running the build to generate initial CSS...`),await new t.t(d).generateCss(),t.r.info(`🎉 Salty CSS project initialized successfully!`),t.r.info(`Next steps:`),t.r.info("1. Configure variables and templates in `salty.config.ts`"),t.r.info("2. Create a new component with `npx salty-css generate [component-name]`"),t.r.info("3. Run `npx salty-css build` to generate the CSS"),t.r.info(`4. Read about the features in the documentation: https://salty-css.dev`),t.r.info(`5. Star the project on GitHub: https://github.com/margarita-form/salty-css ⭐`)}catch(e){return t.n(e instanceof Error?e.message:String(e))}})},$=async()=>{let e=(0,s.join)(process.cwd(),`package.json`),n=await m(e).catch(e=>t.n(e));if(!n)return t.n(`Could not read package.json file.`);let r={...n.dependencies,...n.devDependencies},i=Object.entries(r).filter(([e])=>e===`salty-css`||e.startsWith(`@salty-css/`));return i.length?i:t.n(`No Salty-CSS packages found in package.json. Make sure you are running update command in the same directory! Used package.json path: `+e)},Te=e=>{e.command(`update [version]`).alias(`up`).description(`Update Salty-CSS packages to the latest or specified version.`).option(`-v, --version <version>`,`Version to update to.`).option(`--legacy-peer-deps <legacyPeerDeps>`,`Use legacy peer dependencies (not recommended).`,!1).option(`-y, --yes`,`Skip confirmation prompts (install and rebuild).`).option(`-d, --dir <dir>`,`Project directory to rebuild after updating.`).action(async function(e=`latest`){let{legacyPeerDeps:n,version:r=e,yes:i=!1,dir:a}=this.opts(),o=await $();if(!o)return t.n(`Could not update Salty-CSS packages as any were found in package.json.`);let s=await g(),c=o.map(([e])=>r===`@`?`${e}@${s.version}`:`${e}@${r.replace(/^@/,``)}`);try{await G(c,i)}catch(e){return t.n(e instanceof Error?e.message:String(e))}n?(t.r.warn(`Using legacy peer dependencies to update packages.`),await b(...c,`--legacy-peer-deps`)):await b(...c);let l=await $();if(!l)return t.n(`Something went wrong while reading the updated packages.`);let u=l.reduce((e,[t,n])=>(e[n]||(e[n]=[]),e[n].push(t),e),{});if(Object.keys(u).length===1){let e=Object.keys(u)[0];t.r.info(`Updated to all Salty CSS packages successfully to ${e.replace(/^\^/,``)}`)}else for(let[e,n]of Object.entries(u))t.r.info(`Updated to ${e.replace(/^\^/,``)}: ${n.join(`, `)}`);let d=a??await E();if(!d){t.r.warn("Skipping rebuild: no project directory configured. Run `salty-css build [dir]` manually.");return}if(!await K(`Rebuild Salty CSS now?`,{yes:i}))return;let f=k(d);t.r.info(`Rebuilding Salty-CSS project...`),await new t.t(f).generateCss(),t.r.info(`Rebuild complete.`)})},Ee=e=>{e.option(`-v, --version`,`Show the current version of Salty-CSS.`).action(async function(){let e=await g();t.r.info(`CLI is running: `+e.version);let n=(0,s.join)(process.cwd(),`package.json`),r=await m(n).catch(e=>t.n(e));if(!r)return;let i={...r.dependencies,...r.devDependencies},a=Object.keys(i).filter(e=>e===`salty-css`||e.startsWith(`@salty-css/`));if(!a.length)return t.n(`No Salty-CSS packages found in package.json. Make sure you are running update command in the same directory! Used package.json path: `+n);for(let e of a)t.r.info(`${e}: ${i[e]}`)})};async function De(){let e=new a.Command;e.name(`salty-css`).description(`Salty-CSS CLI tool to help with annoying configuration tasks.`);let t=await E();we(e),Te(e),Ee(e),j(e,t),H(e,t),e.parseAsync(process.argv)}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return De}});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as e, r as t, t as n } from "./salty-compiler-
|
|
1
|
+
import { n as e, r as t, t as n } from "./salty-compiler-f2GWfsa1.js";
|
|
2
2
|
import { isSaltyFile as r } from "./compiler/helpers.js";
|
|
3
3
|
import { pascalCase as i } from "./util/index.js";
|
|
4
4
|
import { checkShouldRestart as a } from "./server/index.js";
|
|
@@ -51,7 +51,7 @@ async function O(e) {
|
|
|
51
51
|
t.error(`Error formatting ${e} with Prettier:`, n);
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd()) => await m(k(e), "utf-8").then(JSON.parse).catch(() => ({})), j = async (e = process.cwd()) => m(k(e), "utf-8").catch(() => void 0), M = async (e = process.cwd()) => (await A(e)).defaultProject,
|
|
54
|
+
var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd()) => await m(k(e), "utf-8").then(JSON.parse).catch(() => ({})), j = async (e = process.cwd()) => m(k(e), "utf-8").catch(() => void 0), M = async (e = process.cwd()) => (await A(e)).defaultProject, N = (e, t, n, r = {}) => {
|
|
55
55
|
let i = u(t, n.srcDirectory), a = {
|
|
56
56
|
dir: i,
|
|
57
57
|
framework: n.name,
|
|
@@ -80,11 +80,11 @@ var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd
|
|
|
80
80
|
changed: c !== e,
|
|
81
81
|
created: !1
|
|
82
82
|
};
|
|
83
|
-
},
|
|
84
|
-
let a = k(e), { content: o, changed: s, created: c } =
|
|
83
|
+
}, P = async (e, n, r, i = {}) => {
|
|
84
|
+
let a = k(e), { content: o, changed: s, created: c } = N(await j(e), n, r, i);
|
|
85
85
|
return s ? (c ? t.info("Creating file: " + a) : t.info("Edit file: " + a), await h(a, o), await O(a), !0) : !1;
|
|
86
|
-
},
|
|
87
|
-
let t = process.cwd(), n =
|
|
86
|
+
}, F = (e, t) => (e.projects || []).find((e) => e.dir === t)?.framework, I = (e, t = process.cwd()) => u(t, e === "." ? "" : e), L = async (e) => {
|
|
87
|
+
let t = process.cwd(), n = I(e.dir, t), r = f(t, n) || ".", i = await x().catch(() => void 0);
|
|
88
88
|
if (e.requirePackageJson !== !1 && !i) throw Error("Salty CSS project must be initialized in a directory with a package.json file.");
|
|
89
89
|
return {
|
|
90
90
|
cwd: t,
|
|
@@ -96,31 +96,31 @@ var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd
|
|
|
96
96
|
skipInstall: !!e.skipInstall,
|
|
97
97
|
yes: !!e.yes
|
|
98
98
|
};
|
|
99
|
-
},
|
|
99
|
+
}, te = (i, o) => {
|
|
100
100
|
i.command("build [directory]").alias("b").description("Build the Salty-CSS project.").option("-d, --dir <dir>", "Project directory to build the project in.").option("--watch", "Watch for changes and rebuild the project.").option("--mode <mode>", "Build mode: \"production\" or \"development\". Defaults to NODE_ENV-based detection.").action(async function(i = o) {
|
|
101
101
|
t.info("Building the Salty-CSS project...");
|
|
102
102
|
let { dir: s = i, watch: l, mode: u } = this.opts();
|
|
103
103
|
if (u !== void 0 && u !== "production" && u !== "development") return e(`Invalid --mode "${u}". Expected "production" or "development".`);
|
|
104
104
|
let d = s ?? await M();
|
|
105
105
|
if (!d) return e("Project directory must be provided. Add it as the first argument after build command or use the --dir option.");
|
|
106
|
-
let f =
|
|
106
|
+
let f = I(d), p = new n(f, { mode: u });
|
|
107
107
|
await p.generateCss(), l && (t.info("Watching for changes in the project directory..."), c(f, { recursive: !0 }, async (e, t) => {
|
|
108
108
|
if (!t) return console.warn("File path not provided for change event");
|
|
109
109
|
await a(t) ? await p.generateCss(!1) : r(t) && await p.generateFile(t);
|
|
110
110
|
}));
|
|
111
111
|
});
|
|
112
|
-
},
|
|
112
|
+
}, ne = [
|
|
113
113
|
"astro.config.mjs",
|
|
114
114
|
"astro.config.ts",
|
|
115
115
|
"astro.config.js",
|
|
116
116
|
"astro.config.cjs"
|
|
117
|
-
],
|
|
118
|
-
for (let t of
|
|
117
|
+
], R = (e) => {
|
|
118
|
+
for (let t of ne) {
|
|
119
119
|
let n = u(e, t);
|
|
120
120
|
if (s(n)) return n;
|
|
121
121
|
}
|
|
122
122
|
return null;
|
|
123
|
-
},
|
|
123
|
+
}, z = (e) => {
|
|
124
124
|
let t = e.packageJson;
|
|
125
125
|
if (!t) return !1;
|
|
126
126
|
let n = {
|
|
@@ -128,10 +128,10 @@ var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd
|
|
|
128
128
|
...t.devDependencies
|
|
129
129
|
};
|
|
130
130
|
return Object.prototype.hasOwnProperty.call(n, "astro");
|
|
131
|
-
},
|
|
131
|
+
}, B = {
|
|
132
132
|
name: "astro",
|
|
133
133
|
srcDirectory: "src",
|
|
134
|
-
detect: (e) => !!
|
|
134
|
+
detect: (e) => !!R(e.projectDir) || z(e),
|
|
135
135
|
runtimePackage: (e) => `@salty-css/astro@${e}`,
|
|
136
136
|
templates: {
|
|
137
137
|
styled: "astro/styled-file.ts",
|
|
@@ -141,7 +141,7 @@ var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd
|
|
|
141
141
|
wrapperExt: ".astro"
|
|
142
142
|
}
|
|
143
143
|
}
|
|
144
|
-
},
|
|
144
|
+
}, V = {
|
|
145
145
|
name: "react",
|
|
146
146
|
srcDirectory: "",
|
|
147
147
|
detect: () => !0,
|
|
@@ -154,43 +154,42 @@ var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd
|
|
|
154
154
|
wrapperExt: ".tsx"
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
|
-
},
|
|
158
|
-
astro:
|
|
159
|
-
react:
|
|
160
|
-
},
|
|
161
|
-
for (let t of
|
|
162
|
-
return
|
|
163
|
-
},
|
|
164
|
-
if (e) return
|
|
165
|
-
},
|
|
157
|
+
}, H = [B, V], U = {
|
|
158
|
+
astro: B,
|
|
159
|
+
react: V
|
|
160
|
+
}, W = async (e) => {
|
|
161
|
+
for (let t of H) if (await t.detect(e)) return t;
|
|
162
|
+
return V;
|
|
163
|
+
}, G = (e) => {
|
|
164
|
+
if (e) return U[e];
|
|
165
|
+
}, K = {
|
|
166
166
|
"salty.config.ts": () => import("./salty.config-DWF4i7K0.js"),
|
|
167
|
-
"
|
|
168
|
-
"saltygen/index.css": () => import("./saltygen_index-BoZSUsyA.js"),
|
|
167
|
+
"saltygen/index.css": () => import("./templates-DWWLjEiU.js"),
|
|
169
168
|
"react/styled-file.ts": () => import("./styled-file-C_4eLAdV.js"),
|
|
170
169
|
"react/vanilla-file.ts": () => import("./vanilla-file-BEqMIe-6.js"),
|
|
171
170
|
"astro/styled-file.ts": () => import("./styled-file-DQHLzmuL.js"),
|
|
172
171
|
"astro/component.astro": () => import("./astro-component-Ov1RH0CO.js")
|
|
173
|
-
},
|
|
174
|
-
let { default: n } = await
|
|
172
|
+
}, q = async (e, t) => {
|
|
173
|
+
let { default: n } = await K[e]();
|
|
175
174
|
return {
|
|
176
175
|
fileName: e,
|
|
177
176
|
content: v.render(n, t)
|
|
178
177
|
};
|
|
179
|
-
},
|
|
178
|
+
}, J = (n, r) => {
|
|
180
179
|
n.command("generate [file] [directory]").alias("g").description("Generate a new component file.").option("-f, --file <file>", "File to generate.").option("-d, --dir <dir>", "Project directory to generate the file in.").option("-t, --tag <tag>", "HTML tag of the component.", "div").option("-n, --name <name>", "Name of the component.").option("-c, --className <className>", "CSS class of the component.").option("-r, --reactComponent", "Generate a wrapper component file alongside the styled definition.").action(async function(n, a = r) {
|
|
181
180
|
let { file: o = n, dir: s = a, tag: c, name: f, className: g, reactComponent: _ = !1 } = this.opts();
|
|
182
181
|
if (!o) return e("File to generate must be provided. Add it as the first argument after generate command or use the --file option.");
|
|
183
182
|
if (!s) return e("Project directory must be provided. Add it as the second argument after generate command or use the --dir option.");
|
|
184
183
|
let v;
|
|
185
184
|
try {
|
|
186
|
-
v = await
|
|
185
|
+
v = await L({
|
|
187
186
|
dir: s,
|
|
188
187
|
requirePackageJson: !1
|
|
189
188
|
});
|
|
190
189
|
} catch (t) {
|
|
191
190
|
return e(t instanceof Error ? t.message : String(t));
|
|
192
191
|
}
|
|
193
|
-
let y =
|
|
192
|
+
let y = G(F(v.rcFile, v.relativeProjectPath)) ?? await W(v), b = o.split("/").slice(0, -1).join("/");
|
|
194
193
|
b && await p(u(v.projectDir, b), { recursive: !0 });
|
|
195
194
|
let x = d(u(v.projectDir, o));
|
|
196
195
|
x.ext ||= ".ts", x.name.endsWith(".css") || (x.name += ".css"), x.base = x.name + x.ext;
|
|
@@ -204,7 +203,7 @@ var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd
|
|
|
204
203
|
if (!y.templates.component) return e(`--reactComponent is not supported for the ${y.name} framework.`);
|
|
205
204
|
let n = C + "Component";
|
|
206
205
|
C += "Wrapper";
|
|
207
|
-
let r = x.base.replace(/\.css\.\w+$/, ""), { content: i } = await
|
|
206
|
+
let r = x.base.replace(/\.css\.\w+$/, ""), { content: i } = await q(y.templates.component.wrapper, {
|
|
208
207
|
tag: c,
|
|
209
208
|
componentName: n,
|
|
210
209
|
styledComponentName: C,
|
|
@@ -215,21 +214,21 @@ var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd
|
|
|
215
214
|
let a = l(x);
|
|
216
215
|
t.info("Generating a new file: " + a), await h(a, i), await O(a);
|
|
217
216
|
}
|
|
218
|
-
let { content: w } = await
|
|
217
|
+
let { content: w } = await q(_ && y.templates.component ? y.templates.component.styled : y.templates.styled, {
|
|
219
218
|
tag: c,
|
|
220
219
|
name: C,
|
|
221
220
|
className: g
|
|
222
221
|
});
|
|
223
222
|
t.info("Generating a new file: " + S), await h(S, w), await O(S);
|
|
224
223
|
});
|
|
225
|
-
},
|
|
224
|
+
}, Y = (e) => {
|
|
226
225
|
let t = e.trim();
|
|
227
226
|
return t.startsWith("-D ") ? `${t.slice(3).trim()} (dev)` : t;
|
|
228
|
-
},
|
|
227
|
+
}, X = (e) => e.map((e) => ` + ${Y(e)}`).join("\n"), Z = async (e, t, n = {}) => {
|
|
229
228
|
if (t || e.length === 0) return;
|
|
230
229
|
let r = n.input ?? process.stdin, i = n.output ?? process.stdout;
|
|
231
230
|
if (!(n.isTTY ?? process.stdin.isTTY ?? !1)) throw Error("Cannot prompt for install confirmation: stdin is not a TTY. Re-run with --yes to install the listed packages without prompting.");
|
|
232
|
-
i.write(`The following packages will be installed:\n${
|
|
231
|
+
i.write(`The following packages will be installed:\n${X(e)}\n`);
|
|
233
232
|
let a = y({
|
|
234
233
|
input: r,
|
|
235
234
|
output: i,
|
|
@@ -241,7 +240,7 @@ var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd
|
|
|
241
240
|
} finally {
|
|
242
241
|
a.close();
|
|
243
242
|
}
|
|
244
|
-
},
|
|
243
|
+
}, re = async (e, t = {}) => {
|
|
245
244
|
if (t.yes) return !0;
|
|
246
245
|
let n = t.input ?? process.stdin, r = t.output ?? process.stdout;
|
|
247
246
|
if (!(t.isTTY ?? process.stdin.isTTY ?? !1)) return !1;
|
|
@@ -256,67 +255,67 @@ var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd
|
|
|
256
255
|
} finally {
|
|
257
256
|
a.close();
|
|
258
257
|
}
|
|
259
|
-
},
|
|
258
|
+
}, ie = [
|
|
260
259
|
"src",
|
|
261
260
|
"public",
|
|
262
261
|
"assets",
|
|
263
262
|
"styles",
|
|
264
263
|
"css",
|
|
265
264
|
"app"
|
|
266
|
-
],
|
|
265
|
+
], ae = [
|
|
267
266
|
"styles",
|
|
268
267
|
"css",
|
|
269
268
|
"app",
|
|
270
269
|
"pages"
|
|
271
|
-
],
|
|
270
|
+
], oe = [
|
|
272
271
|
"index",
|
|
273
272
|
"styles",
|
|
274
273
|
"main",
|
|
275
274
|
"app",
|
|
276
275
|
"global",
|
|
277
276
|
"globals"
|
|
278
|
-
],
|
|
277
|
+
], se = [
|
|
279
278
|
".css",
|
|
280
279
|
".scss",
|
|
281
280
|
".sass"
|
|
282
|
-
],
|
|
283
|
-
for (let t of
|
|
281
|
+
], ce = async (e) => {
|
|
282
|
+
for (let t of ie) for (let n of oe) for (let r of se) {
|
|
284
283
|
let i = u(e, t, n + r);
|
|
285
284
|
if (await m(i, "utf-8").catch(() => void 0) !== void 0) return f(e, i);
|
|
286
|
-
for (let i of
|
|
285
|
+
for (let i of ae) {
|
|
287
286
|
let a = u(e, t, i, n + r);
|
|
288
287
|
if (await m(a, "utf-8").catch(() => void 0) !== void 0) return f(e, a);
|
|
289
288
|
}
|
|
290
289
|
}
|
|
291
|
-
},
|
|
290
|
+
}, le = (e) => `@salty-css/astro@${e}`, ue = "import saltyIntegration from '@salty-css/astro/integration';\n", de = (e) => {
|
|
292
291
|
if (e.includes("@salty-css/astro")) return { content: null };
|
|
293
292
|
let t = e, n = !1;
|
|
294
|
-
return /integrations\s*:\s*\[/.test(t) ? (t = t.replace(/integrations\s*:\s*\[/, (e) => `${e}saltyIntegration(),`), n = !0) : /defineConfig\s*\(\s*\{/.test(t) && (t = t.replace(/defineConfig\s*\(\s*\{/, (e) => `${e}\n integrations: [saltyIntegration()],`), n = !0), n ? { content:
|
|
293
|
+
return /integrations\s*:\s*\[/.test(t) ? (t = t.replace(/integrations\s*:\s*\[/, (e) => `${e}saltyIntegration(),`), n = !0) : /defineConfig\s*\(\s*\{/.test(t) && (t = t.replace(/defineConfig\s*\(\s*\{/, (e) => `${e}\n integrations: [saltyIntegration()],`), n = !0), n ? { content: ue + t } : {
|
|
295
294
|
content: null,
|
|
296
295
|
warning: "Could not find a place to add saltyIntegration() in the Astro config. Please add it manually."
|
|
297
296
|
};
|
|
298
|
-
},
|
|
297
|
+
}, fe = {
|
|
299
298
|
name: "astro",
|
|
300
|
-
detect: (e) =>
|
|
299
|
+
detect: (e) => R(e.projectDir),
|
|
301
300
|
plan: async (e, n) => {
|
|
302
301
|
let r = await m(n, "utf-8").catch(() => void 0);
|
|
303
302
|
if (r === void 0) return null;
|
|
304
|
-
let i =
|
|
303
|
+
let i = de(r);
|
|
305
304
|
if (i.warning && t.warn(i.warning), i.content === null) return null;
|
|
306
305
|
let a = i.content;
|
|
307
306
|
return {
|
|
308
|
-
packages: [`-D ${
|
|
307
|
+
packages: [`-D ${le(e.cliVersion)}`],
|
|
309
308
|
execute: async () => (t.info("Adding Salty-CSS integration to Astro config: " + n), await h(n, a), await O(n), { changed: !0 })
|
|
310
309
|
};
|
|
311
310
|
}
|
|
312
|
-
},
|
|
311
|
+
}, pe = [
|
|
313
312
|
["projectJs", "eslint.config.js"],
|
|
314
313
|
["rootJs", "eslint.config.js"],
|
|
315
314
|
["projectMjs", "eslint.config.mjs"],
|
|
316
315
|
["rootMjs", "eslint.config.mjs"],
|
|
317
316
|
["projectJson", ".eslintrc.json"],
|
|
318
317
|
["rootJson", ".eslintrc.json"]
|
|
319
|
-
],
|
|
318
|
+
], me = (e, t) => pe.map(([n, r]) => u(n.startsWith("root") ? t : e, r)), he = (e, t) => {
|
|
320
319
|
if (e.includes("salty-css")) return { content: null };
|
|
321
320
|
if (t) {
|
|
322
321
|
let t = `import saltyCss from "@salty-css/eslint-config-core/flat";\n${e}`;
|
|
@@ -335,13 +334,13 @@ var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd
|
|
|
335
334
|
}
|
|
336
335
|
let n = JSON.parse(e);
|
|
337
336
|
return n.extends ||= [], n.extends.includes("@salty-css/core") || n.extends.push("@salty-css/core"), { content: JSON.stringify(n, null, 2) };
|
|
338
|
-
},
|
|
337
|
+
}, ge = {
|
|
339
338
|
name: "eslint",
|
|
340
|
-
detect: (e) =>
|
|
339
|
+
detect: (e) => me(e.projectDir, e.cwd).find((e) => s(e)) ?? null,
|
|
341
340
|
plan: async (e, n) => {
|
|
342
341
|
let r = await m(n, "utf-8").catch(() => void 0);
|
|
343
342
|
if (r === void 0) return t.error("Could not read ESLint config file."), null;
|
|
344
|
-
let i =
|
|
343
|
+
let i = he(r, n.endsWith("js"));
|
|
345
344
|
if (i.warning && t.warn(i.warning), i.content === null) return null;
|
|
346
345
|
let a = i.content;
|
|
347
346
|
return {
|
|
@@ -349,31 +348,31 @@ var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd
|
|
|
349
348
|
execute: async () => (t.info("Edit file: " + n), await h(n, a), await O(n), { changed: !0 })
|
|
350
349
|
};
|
|
351
350
|
}
|
|
352
|
-
},
|
|
351
|
+
}, _e = [
|
|
353
352
|
"next.config.js",
|
|
354
353
|
"next.config.cjs",
|
|
355
354
|
"next.config.ts",
|
|
356
355
|
"next.config.mjs"
|
|
357
|
-
],
|
|
356
|
+
], ve = (e) => `@salty-css/next@${e}`, ye = (e) => {
|
|
358
357
|
if (e.includes("withSaltyCss")) return { content: null };
|
|
359
358
|
let t = e, n = !1;
|
|
360
359
|
/\splugins([^=]*)=[^[]\[/.test(t) && (t = t.replace(/\splugins([^=]*)=[^[]\[/, (e, t) => ` plugins${t}= [withSaltyCss,`), n = !0);
|
|
361
360
|
let r = t.includes("module.exports"), i = r ? "const { withSaltyCss } = require('@salty-css/next');\n" : "import { withSaltyCss } from '@salty-css/next';\n";
|
|
362
361
|
return r && !n ? (t = t.replace(/module.exports = ([^;]+)/, (e, t) => `module.exports = withSaltyCss(${t})`), n = !0) : n || (t = t.replace(/export default ([^;]+)/, (e, t) => `export default withSaltyCss(${t})`)), { content: i + t };
|
|
363
|
-
},
|
|
362
|
+
}, be = {
|
|
364
363
|
name: "next",
|
|
365
|
-
detect: (e) =>
|
|
364
|
+
detect: (e) => _e.map((t) => u(e.projectDir, t)).find((e) => s(e)) ?? null,
|
|
366
365
|
plan: async (e, n) => {
|
|
367
366
|
let r = await m(n, "utf-8").catch(() => void 0);
|
|
368
367
|
if (r === void 0) return null;
|
|
369
|
-
let { content: i } =
|
|
368
|
+
let { content: i } = ye(r);
|
|
370
369
|
return i === null ? null : {
|
|
371
|
-
packages: [`-D ${
|
|
370
|
+
packages: [`-D ${ve(e.cliVersion)}`],
|
|
372
371
|
execute: async () => (t.info("Adding Salty-CSS plugin to Next.js config..."), await h(n, i), await O(n), { changed: !0 })
|
|
373
372
|
};
|
|
374
373
|
}
|
|
375
|
-
},
|
|
376
|
-
|
|
374
|
+
}, xe = (e) => `@salty-css/vite@${e}`, Se = (e) => e.includes("saltyPlugin") ? { content: null } : { content: "import { saltyPlugin } from '@salty-css/vite';\n" + e.replace(/(plugins: \[)/, "$1\n saltyPlugin(__dirname),") }, Ce = [
|
|
375
|
+
ge,
|
|
377
376
|
{
|
|
378
377
|
name: "vite",
|
|
379
378
|
detect: (e) => {
|
|
@@ -383,18 +382,18 @@ var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd
|
|
|
383
382
|
plan: async (e, n) => {
|
|
384
383
|
let r = await m(n, "utf-8").catch(() => void 0);
|
|
385
384
|
if (r === void 0) return null;
|
|
386
|
-
let { content: i } =
|
|
385
|
+
let { content: i } = Se(r);
|
|
387
386
|
return i === null ? null : {
|
|
388
|
-
packages: [`-D ${
|
|
387
|
+
packages: [`-D ${xe(e.cliVersion)}`],
|
|
389
388
|
execute: async () => (t.info("Edit file: " + n), t.info("Adding Salty-CSS plugin to Vite config..."), await h(n, i), await O(n), { changed: !0 })
|
|
390
389
|
};
|
|
391
390
|
}
|
|
392
391
|
},
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
],
|
|
392
|
+
be,
|
|
393
|
+
fe
|
|
394
|
+
], we = async (e) => {
|
|
396
395
|
let t = [];
|
|
397
|
-
for (let n of
|
|
396
|
+
for (let n of Ce) {
|
|
398
397
|
let r = await n.detect(e);
|
|
399
398
|
if (!r) continue;
|
|
400
399
|
let i = await n.plan(e, r);
|
|
@@ -405,7 +404,7 @@ var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd
|
|
|
405
404
|
});
|
|
406
405
|
}
|
|
407
406
|
return t;
|
|
408
|
-
},
|
|
407
|
+
}, Te = async (e) => {
|
|
409
408
|
let t = [];
|
|
410
409
|
for (let { name: n, configPath: r, plan: i } of e) {
|
|
411
410
|
let e = await i.execute();
|
|
@@ -416,14 +415,14 @@ var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd
|
|
|
416
415
|
});
|
|
417
416
|
}
|
|
418
417
|
return t;
|
|
419
|
-
},
|
|
418
|
+
}, Ee = {
|
|
420
419
|
vite: ["dist/**"],
|
|
421
420
|
next: [".next/**", "out/**"]
|
|
422
|
-
},
|
|
421
|
+
}, De = ({ framework: e, integrations: t, hasSrcDir: n }) => {
|
|
423
422
|
if (e === "astro") return {};
|
|
424
|
-
let r = [...new Set(t.flatMap((e) =>
|
|
423
|
+
let r = [...new Set(t.flatMap((e) => Ee[e] ?? []))], i = {};
|
|
425
424
|
return n && (i.include = ["src/**"]), r.length && (i.exclude = r), i;
|
|
426
|
-
},
|
|
425
|
+
}, Oe = async (e, n, r) => {
|
|
427
426
|
let i = u(e, n);
|
|
428
427
|
if (s(i)) {
|
|
429
428
|
t.debug("File already exists: " + i);
|
|
@@ -435,14 +434,9 @@ var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd
|
|
|
435
434
|
let n = u(e, ".gitignore"), r = await m(n, "utf-8").catch(() => void 0);
|
|
436
435
|
r !== void 0 && (r.includes("saltygen") || (t.info("Edit file: " + n), await h(n, r + "\n\n# Salty-CSS\nsaltygen\n")));
|
|
437
436
|
}, ke = async (e, n) => {
|
|
438
|
-
let r = n ?? await
|
|
437
|
+
let r = n ?? await ce(e);
|
|
439
438
|
if (!r) {
|
|
440
|
-
|
|
441
|
-
t.warn("Could not find a CSS file to import the generated CSS. Please add it manually.");
|
|
442
|
-
return;
|
|
443
|
-
}
|
|
444
|
-
let { fileName: n, content: r } = await G("styles/index.css");
|
|
445
|
-
await Z(e, n, r);
|
|
439
|
+
t.warn("Could not find a CSS file to import the generated CSS. Please add it manually.");
|
|
446
440
|
return;
|
|
447
441
|
}
|
|
448
442
|
let i = u(e, r), a = await m(i, "utf-8").catch(() => void 0);
|
|
@@ -461,31 +455,33 @@ var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd
|
|
|
461
455
|
try {
|
|
462
456
|
let i = this.opts(), a = i.dir ?? r;
|
|
463
457
|
if (!a) return e("Project directory must be provided. Add it as the first argument after init command or use the --dir option.");
|
|
464
|
-
let o = await
|
|
458
|
+
let o = await L({
|
|
465
459
|
dir: a,
|
|
466
460
|
skipInstall: i.skipInstall,
|
|
467
461
|
yes: i.yes
|
|
468
462
|
});
|
|
469
463
|
t.info("Initializing a new Salty-CSS project!");
|
|
470
|
-
let c = await
|
|
464
|
+
let c = await W(o);
|
|
471
465
|
t.info(`Detected framework: ${c.name}`);
|
|
472
|
-
let l = await
|
|
466
|
+
let l = await we(o);
|
|
473
467
|
if (!o.skipInstall) {
|
|
474
468
|
let e = [
|
|
475
469
|
w.core(o.cliVersion),
|
|
476
470
|
c.runtimePackage(o.cliVersion),
|
|
477
471
|
...l.flatMap((e) => e.plan.packages)
|
|
478
472
|
];
|
|
479
|
-
await
|
|
473
|
+
await Z(e, o.yes), await D(...e);
|
|
480
474
|
}
|
|
481
|
-
let d = await Promise.all([
|
|
482
|
-
await p(
|
|
483
|
-
let
|
|
475
|
+
let d = await Promise.all([q("salty.config.ts"), q("saltygen/index.css")]);
|
|
476
|
+
await p(o.projectDir, { recursive: !0 });
|
|
477
|
+
let f = u(o.projectDir, c.srcDirectory);
|
|
478
|
+
await Promise.all(d.map(({ fileName: e, content: t }) => Oe(f, e, t)));
|
|
479
|
+
let m = De({
|
|
484
480
|
framework: c.name,
|
|
485
481
|
integrations: l.map((e) => e.name),
|
|
486
482
|
hasSrcDir: s(u(o.projectDir, "src"))
|
|
487
483
|
});
|
|
488
|
-
await
|
|
484
|
+
await P(o.cwd, o.relativeProjectPath, c, m), await Q(o.cwd), await ke(o.projectDir, i.cssFile), await Te(l), await Ae(), t.info("Running the build to generate initial CSS..."), await new n(f).generateCss(), t.info("🎉 Salty CSS project initialized successfully!"), t.info("Next steps:"), t.info("1. Configure variables and templates in `salty.config.ts`"), t.info("2. Create a new component with `npx salty-css generate [component-name]`"), t.info("3. Run `npx salty-css build` to generate the CSS"), t.info("4. Read about the features in the documentation: https://salty-css.dev"), t.info("5. Star the project on GitHub: https://github.com/margarita-form/salty-css ⭐");
|
|
489
485
|
} catch (t) {
|
|
490
486
|
return e(t instanceof Error ? t.message : String(t));
|
|
491
487
|
}
|
|
@@ -504,7 +500,7 @@ var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd
|
|
|
504
500
|
if (!c) return e("Could not update Salty-CSS packages as any were found in package.json.");
|
|
505
501
|
let l = await C(), u = c.map(([e]) => a === "@" ? `${e}@${l.version}` : `${e}@${a.replace(/^@/, "")}`);
|
|
506
502
|
try {
|
|
507
|
-
await
|
|
503
|
+
await Z(u, o);
|
|
508
504
|
} catch (t) {
|
|
509
505
|
return e(t instanceof Error ? t.message : String(t));
|
|
510
506
|
}
|
|
@@ -521,8 +517,8 @@ var k = (e = process.cwd()) => u(e, ".saltyrc.json"), A = async (e = process.cwd
|
|
|
521
517
|
t.warn("Skipping rebuild: no project directory configured. Run `salty-css build [dir]` manually.");
|
|
522
518
|
return;
|
|
523
519
|
}
|
|
524
|
-
if (!await
|
|
525
|
-
let m =
|
|
520
|
+
if (!await re("Rebuild Salty CSS now?", { yes: o })) return;
|
|
521
|
+
let m = I(p);
|
|
526
522
|
t.info("Rebuilding Salty-CSS project..."), await new n(m).generateCss(), t.info("Rebuild complete.");
|
|
527
523
|
});
|
|
528
524
|
}, Ne = (n) => {
|
|
@@ -545,7 +541,7 @@ async function Pe() {
|
|
|
545
541
|
let e = new o();
|
|
546
542
|
e.name("salty-css").description("Salty-CSS CLI tool to help with annoying configuration tasks.");
|
|
547
543
|
let t = await M();
|
|
548
|
-
je(e), Me(e), Ne(e),
|
|
544
|
+
je(e), Me(e), Ne(e), te(e, t), J(e, t), e.parseAsync(process.argv);
|
|
549
545
|
}
|
|
550
546
|
//#endregion
|
|
551
547
|
export { Pe as t };
|
|
@@ -3,7 +3,7 @@ const e=require("./chunk-CMqjfN_6.cjs"),t=require("./compiler/helpers.cjs"),n=re
|
|
|
3
3
|
`),S=`/*!
|
|
4
4
|
* Generated with Salty CSS (https://salty-css.dev)
|
|
5
5
|
* Do not edit this file directly
|
|
6
|
-
* Version 0.4.5-
|
|
6
|
+
* Version 0.4.5-fix-cli-astro-salty-config-dir.1
|
|
7
7
|
*/
|
|
8
8
|
@layer imports, reset, global, templates, fonts, l0, l1, l2, l3, l4, l5, l6, l7, l8;\n\n${[`_imports.css`,`_variables.css`,`_reset.css`,`_global.css`,`_templates.css`,`_fonts.css`].filter(e=>{try{return(0,c.readFileSync)((0,u.join)(o,`css`,e),`utf8`).length>0}catch{return!1}}).map(e=>`@import url('./css/${e}')${e===`_imports.css`?` layer(imports)`:``};`).join(`
|
|
9
9
|
`)}\n${x}`;if(y.importStrategy!==`component`){let e=a.reduce((e,t,r)=>{let i=t.reduce((e,t)=>{let r=(0,u.join)(o,`css`,t),i=(0,c.readFileSync)(r,`utf8`),a=/.*-([^-]+)-\d+.css/.exec(t)?.at(1)||n.toHash(r,6);return e.includes(a)?e:`${e}\n/*start:${a}-${t}*/\n${i}\n/*end:${a}*/\n`},``),a=`l_${r}.css`;return(0,c.writeFileSync)((0,u.join)(o,`css`,a),`@layer l${r} { ${i}\n }`),`${e}\n@import url('./css/${a}');`},``);S+=e}(0,c.writeFileSync)(s,S);let C=Date.now()-r,w=C<200?`🔥`:C<500?`🚀`:C<1e3?`🎉`:C<2e3?`🚗`:C<5e3?`🤔`:`🥴`;h.info(`Generated CSS in ${C}ms! ${w}`)}catch(e){console.error(e)}};generateConfigStyles=async e=>{let t=await this.getDestDir(),o={mediaQueries:[],globalStyles:[],variables:[],templates:[],imports:[],fonts:[]};await Promise.all([...e].map(async e=>{let{contents:n,outputFilePath:r}=await this.compileSaltyFile(e,t);Object.entries(n).forEach(([t,n])=>{n.isMedia?o.mediaQueries.push([t,n]):n.isGlobalDefine?o.globalStyles.push(n):n.isDefineVariables?o.variables.push(n):n.isDefineTemplates?o.templates.push(n._setPath(`${t};;${r}`)):n.isDefineImport?o.imports.push(n._setPath(e)):n.isDefineFont&&o.fonts.push(n)})}));let{config:l,path:d}=await this.generateConfig(),f={...l},{mediaQueries:p}=o;f.mediaQueries=Object.fromEntries(p.map(([e,t])=>[`@${e}`,t]));let m=p.map(([e])=>`'@${e}'`).join(` | `),g=new Set,_=async(e,t=[])=>{if(!e)return[];let r=Object.entries(e).map(async([e,r])=>{let a=async r=>{if(!r)return;if(r instanceof Promise)return await a(await r);if(typeof r==`function`)return await a(await r());if(typeof r==`object`)return await _(r,[...t,e]);let o=O(e),s=n.dashCase(e),c=[...t,o].join(`.`);g.add(`"${c}"`);let l=[...t.map(n.dashCase),s].join(`-`),u=i.s(r);return u?`--${l}: ${u.transformed};`:`--${l}: ${r};`};return await a(r)});return(await Promise.all(r)).flat()},v=async e=>{if(!e)return[];let t=Object.entries(e).map(async([e,t])=>{let n=await _(t);return e===`base`?n.join(``):f.mediaQueries[e]?`${f.mediaQueries[e]} { ${n.join(``)} }`:`${e} { ${n.join(``)} }`});return(await Promise.all(t)).flat()},y=async e=>{if(!e)return[];let t=Object.entries(e).map(async([e,t])=>{let n=Object.entries(t).map(async([t,n])=>{let r=await _(n,[e]);return`${`.${e}-${t}, [data-${e}="${t}"]`} { ${r.join(``)} }`});return(await Promise.all(n)).flat()});return(await Promise.all(t)).flat()},b=(e={})=>({...e,responsive:void 0,conditional:void 0}),x=e=>o.variables.map(t=>e===`static`?b(t._current):t._current[e]),S=a.mergeObjects(b(l.variables),x(`static`)),C=await _(S),T=await v(a.mergeObjects(l.variables?.responsive,x(`responsive`))),E=await y(a.mergeObjects(l.variables?.conditional,x(`conditional`)));(0,c.writeFileSync)((0,u.join)(t,`css/_variables.css`),`:root { ${C.join(``)} ${T.join(``)} } ${E.join(``)}`),f.staticVariables=S,(0,c.writeFileSync)((0,u.join)(t,`css/_global.css`),`@layer global { ${await i.t(a.mergeObjects(l.global,o.globalStyles),``)} }`);let D=(0,u.join)(t,`css/_reset.css`);(0,c.writeFileSync)(D,`@layer reset { ${await i.t(l.reset===`none`?{}:typeof l.reset==`object`?l.reset:k,``)} }`);let A=(0,u.join)(t,`css/_templates.css`),j=a.mergeObjects(l.templates,o.templates),M=await s.parseTemplates(j),N=s.getTemplateTypes(j),P=s.getTemplateVariantMaps(j);(0,c.writeFileSync)(A,`@layer templates { ${M} }`),f.templates=j;let F=(0,u.join)(t,`css/_imports.css`),I=[];for(let e of o.imports){let n=e._path;if(n)for(let r of e._current)try{let{rule:e}=w(r,n,t);I.push(e)}catch(e){let t=typeof r==`string`?r:r.url;h.error(`Failed to resolve defineImport(${JSON.stringify(t)}) from ${n}: ${e.message}`)}}(0,c.writeFileSync)(F,I.join(`
|
|
@@ -244,7 +244,7 @@ var X = {
|
|
|
244
244
|
let A = c.map((e) => `@import url('./css/${e}');`).join("\n"), j = `/*!
|
|
245
245
|
* Generated with Salty CSS (https://salty-css.dev)
|
|
246
246
|
* Do not edit this file directly
|
|
247
|
-
* Version 0.4.5-
|
|
247
|
+
* Version 0.4.5-fix-cli-astro-salty-config-dir.1
|
|
248
248
|
*/
|
|
249
249
|
@layer imports, reset, global, templates, fonts, l0, l1, l2, l3, l4, l5, l6, l7, l8;\n\n${[
|
|
250
250
|
"_imports.css",
|
package/package.json
CHANGED
package/dist/main-BoqRA5gm.cjs
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
const e=require("./chunk-CMqjfN_6.cjs"),t=require("./salty-compiler-1LbXg6lw.cjs"),n=require("./compiler/helpers.cjs"),r=require("./util/index.cjs"),i=require("./server/index.cjs");let a=require("commander"),o=require("fs"),s=require("path"),c=require("fs/promises"),l=require("child_process"),u=require("ora");u=e.t(u,1);let d=require("ejs");d=e.t(d,1);let f=require("readline/promises");var p=(0,s.join)(process.cwd(),`package.json`),m=async(e=p)=>{let t=await(0,c.readFile)(e,`utf-8`).then(JSON.parse).catch(()=>void 0);if(!t)throw`Could not read package.json file!`;return t},h=async(e,t=p)=>{typeof e==`object`&&(e=JSON.stringify(e,null,2)),await(0,c.writeFile)(t,e)},g=async()=>m(new URL(`../package.json`,``+{}.url)),_={core:e=>`@salty-css/core@${e}`,eslintConfigCore:e=>`@salty-css/eslint-config-core@${e}`},v=e=>{e.scripts||={};let t=e.scripts.prepare;if(t){if(t.includes(`salty-css`))return{changed:!1,pkg:e};e.scripts.prepare=t+` && npx salty-css build`}else e.scripts.prepare=`npx salty-css build`;return{changed:!0,pkg:e}},y=e=>new Promise((t,n)=>{(0,l.exec)(e,e=>{if(e)return n(e);t()})}),b=async(...e)=>{let t=e.map(e=>e.replace(`-D`,``).split(`@`).slice(0,-1).join(`@`).trim()).join(`, `),n=(0,u.default)(`Installing packages: ${t}`).start();await y(`npm install ${e.join(` `)}`),n.succeed(`Installed packages: ${t}`)},x=()=>(0,o.existsSync)((0,s.join)(process.cwd(),`node_modules`,`.bin`,`prettier`));async function S(e){try{if(!x())return;await y(`./node_modules/.bin/prettier --write "${e}"`),t.r.info(`Formatted ${e} with Prettier`)}catch(n){t.r.error(`Error formatting ${e} with Prettier:`,n)}}var C=(e=process.cwd())=>(0,s.join)(e,`.saltyrc.json`),w=async(e=process.cwd())=>await(0,c.readFile)(C(e),`utf-8`).then(JSON.parse).catch(()=>({})),ee=async(e=process.cwd())=>(0,c.readFile)(C(e),`utf-8`).catch(()=>void 0),T=async(e=process.cwd())=>(await w(e)).defaultProject,E=(e,t,n,r={})=>{let i=(0,s.join)(t,n.srcDirectory),a={dir:i,framework:n.name,...r};if(e===void 0)return{content: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:i,projects:[a]},null,2),changed:!0,created:!0};let o=JSON.parse(e),c=o.projects||[];if(c.some(e=>e.dir===i))return{content:e,changed:!1,created:!1};c.push(a),o.projects=[...c];let l=JSON.stringify(o,null,2);return{content:l,changed:l!==e,created:!1}},D=async(e,n,r,i={})=>{let a=C(e),{content:o,changed:s,created:l}=E(await ee(e),n,r,i);return s?(l?t.r.info(`Creating file: `+a):t.r.info(`Edit file: `+a),await(0,c.writeFile)(a,o),await S(a),!0):!1},te=(e,t)=>(e.projects||[]).find(e=>e.dir===t)?.framework,O=(e,t=process.cwd())=>(0,s.join)(t,e===`.`?``:e),k=async e=>{let t=process.cwd(),n=O(e.dir,t),r=(0,s.relative)(t,n)||`.`,i=await m().catch(()=>void 0);if(e.requirePackageJson!==!1&&!i)throw Error(`Salty CSS project must be initialized in a directory with a package.json file.`);return{cwd:t,projectDir:n,relativeProjectPath:r,packageJson:i,rcFile:await w(t),cliVersion:(await g()).version||`0.0.0`,skipInstall:!!e.skipInstall,yes:!!e.yes}},A=(e,r)=>{e.command(`build [directory]`).alias(`b`).description(`Build the Salty-CSS project.`).option(`-d, --dir <dir>`,`Project directory to build the project in.`).option(`--watch`,`Watch for changes and rebuild the project.`).option(`--mode <mode>`,`Build mode: "production" or "development". Defaults to NODE_ENV-based detection.`).action(async function(e=r){t.r.info(`Building the Salty-CSS project...`);let{dir:a=e,watch:s,mode:c}=this.opts();if(c!==void 0&&c!==`production`&&c!==`development`)return t.n(`Invalid --mode "${c}". Expected "production" or "development".`);let l=a??await T();if(!l)return t.n(`Project directory must be provided. Add it as the first argument after build command or use the --dir option.`);let u=O(l),d=new t.t(u,{mode:c});await d.generateCss(),s&&(t.r.info(`Watching for changes in the project directory...`),(0,o.watch)(u,{recursive:!0},async(e,t)=>{if(!t)return console.warn(`File path not provided for change event`);await i.checkShouldRestart(t)?await d.generateCss(!1):n.isSaltyFile(t)&&await d.generateFile(t)}))})},ne=[`astro.config.mjs`,`astro.config.ts`,`astro.config.js`,`astro.config.cjs`],j=e=>{for(let t of ne){let n=(0,s.join)(e,t);if((0,o.existsSync)(n))return n}return null},M=e=>{let t=e.packageJson;if(!t)return!1;let n={...t.dependencies,...t.devDependencies};return Object.prototype.hasOwnProperty.call(n,`astro`)},N={name:`astro`,srcDirectory:`src`,detect:e=>!!j(e.projectDir)||M(e),runtimePackage:e=>`@salty-css/astro@${e}`,templates:{styled:`astro/styled-file.ts`,component:{styled:`astro/styled-file.ts`,wrapper:`astro/component.astro`,wrapperExt:`.astro`}}},P={name:`react`,srcDirectory:``,detect:()=>!0,runtimePackage:e=>`@salty-css/react@${e}`,templates:{styled:`react/styled-file.ts`,component:{styled:`react/styled-file.ts`,wrapper:`react/vanilla-file.ts`,wrapperExt:`.tsx`}}},F=[N,P],I={astro:N,react:P},L=async e=>{for(let t of F)if(await t.detect(e))return t;return P},R=e=>{if(e)return I[e]},z={"salty.config.ts":()=>Promise.resolve().then(()=>require("./salty.config-B0ZiRpHR.cjs")),"styles/index.css":()=>Promise.resolve().then(()=>require("./styles_index-DgmdjfFo.cjs")),"saltygen/index.css":()=>Promise.resolve().then(()=>require("./saltygen_index-BGHLaAOm.cjs")),"react/styled-file.ts":()=>Promise.resolve().then(()=>require("./styled-file-BCbAEzBB.cjs")),"react/vanilla-file.ts":()=>Promise.resolve().then(()=>require("./vanilla-file-Z3VsOa_U.cjs")),"astro/styled-file.ts":()=>Promise.resolve().then(()=>require("./styled-file-DorArlCk.cjs")),"astro/component.astro":()=>Promise.resolve().then(()=>require("./astro-component-r0qEcF1p.cjs"))},B=async(e,t)=>{let{default:n}=await z[e]();return{fileName:e,content:d.default.render(n,t)}},V=(e,n)=>{e.command(`generate [file] [directory]`).alias(`g`).description(`Generate a new component file.`).option(`-f, --file <file>`,`File to generate.`).option(`-d, --dir <dir>`,`Project directory to generate the file in.`).option(`-t, --tag <tag>`,`HTML tag of the component.`,`div`).option(`-n, --name <name>`,`Name of the component.`).option(`-c, --className <className>`,`CSS class of the component.`).option(`-r, --reactComponent`,`Generate a wrapper component file alongside the styled definition.`).action(async function(e,i=n){let{file:a=e,dir:o=i,tag:l,name:u,className:d,reactComponent:f=!1}=this.opts();if(!a)return t.n(`File to generate must be provided. Add it as the first argument after generate command or use the --file option.`);if(!o)return t.n(`Project directory must be provided. Add it as the second argument after generate command or use the --dir option.`);let p;try{p=await k({dir:o,requirePackageJson:!1})}catch(e){return t.n(e instanceof Error?e.message:String(e))}let m=R(te(p.rcFile,p.relativeProjectPath))??await L(p),h=a.split(`/`).slice(0,-1).join(`/`);h&&await(0,c.mkdir)((0,s.join)(p.projectDir,h),{recursive:!0});let g=(0,s.parse)((0,s.join)(p.projectDir,a));g.ext||=`.ts`,g.name.endsWith(`.css`)||(g.name+=`.css`),g.base=g.name+g.ext;let _=(0,s.format)(g);if(await(0,c.readFile)(_,`utf-8`).catch(()=>void 0)!==void 0){t.r.error(`File already exists: `+_);return}let v=r.pascalCase(u||g.base.replace(/\.css\.\w+$/,``));if(f){if(!m.templates.component)return t.n(`--reactComponent is not supported for the ${m.name} framework.`);let e=v+`Component`;v+=`Wrapper`;let n=g.base.replace(/\.css\.\w+$/,``),{content:r}=await B(m.templates.component.wrapper,{tag:l,componentName:e,styledComponentName:v,className:d,fileName:n});g.name=n.replace(/\.css$/,``),g.ext=m.templates.component.wrapperExt,g.base=g.name+g.ext;let i=(0,s.format)(g);t.r.info(`Generating a new file: `+i),await(0,c.writeFile)(i,r),await S(i)}let{content:y}=await B(f&&m.templates.component?m.templates.component.styled:m.templates.styled,{tag:l,name:v,className:d});t.r.info(`Generating a new file: `+_),await(0,c.writeFile)(_,y),await S(_)})},H=e=>{let t=e.trim();return t.startsWith(`-D `)?`${t.slice(3).trim()} (dev)`:t},U=e=>e.map(e=>` + ${H(e)}`).join(`
|
|
2
|
-
`),W=async(e,t,n={})=>{if(t||e.length===0)return;let r=n.input??process.stdin,i=n.output??process.stdout;if(!(n.isTTY??process.stdin.isTTY??!1))throw Error(`Cannot prompt for install confirmation: stdin is not a TTY. Re-run with --yes to install the listed packages without prompting.`);i.write(`The following packages will be installed:\n${U(e)}\n`);let a=(0,f.createInterface)({input:r,output:i,terminal:!1});try{let e=(await a.question(`Proceed? (y/N) `)).trim().toLowerCase();if(e!==`y`&&e!==`yes`)throw Error(`Install cancelled by user.`)}finally{a.close()}},G=async(e,t={})=>{if(t.yes)return!0;let n=t.input??process.stdin,r=t.output??process.stdout;if(!(t.isTTY??process.stdin.isTTY??!1))return!1;let i=t.defaultYes?`(Y/n)`:`(y/N)`,a=(0,f.createInterface)({input:n,output:r,terminal:!1});try{let n=(await a.question(`${e} ${i} `)).trim().toLowerCase();return n===``?!!t.defaultYes:n===`y`||n===`yes`}finally{a.close()}},K=[`src`,`public`,`assets`,`styles`,`css`,`app`],q=[`styles`,`css`,`app`,`pages`],J=[`index`,`styles`,`main`,`app`,`global`,`globals`],Y=[`.css`,`.scss`,`.sass`],X=async e=>{for(let t of K)for(let n of J)for(let r of Y){let i=(0,s.join)(e,t,n+r);if(await(0,c.readFile)(i,`utf-8`).catch(()=>void 0)!==void 0)return(0,s.relative)(e,i);for(let i of q){let a=(0,s.join)(e,t,i,n+r);if(await(0,c.readFile)(a,`utf-8`).catch(()=>void 0)!==void 0)return(0,s.relative)(e,a)}}},Z=e=>`@salty-css/astro@${e}`,re=`import saltyIntegration from '@salty-css/astro/integration';
|
|
3
|
-
`,ie=e=>{if(e.includes(`@salty-css/astro`))return{content:null};let t=e,n=!1;return/integrations\s*:\s*\[/.test(t)?(t=t.replace(/integrations\s*:\s*\[/,e=>`${e}saltyIntegration(),`),n=!0):/defineConfig\s*\(\s*\{/.test(t)&&(t=t.replace(/defineConfig\s*\(\s*\{/,e=>`${e}\n integrations: [saltyIntegration()],`),n=!0),n?{content:re+t}:{content:null,warning:`Could not find a place to add saltyIntegration() in the Astro config. Please add it manually.`}},ae={name:`astro`,detect:e=>j(e.projectDir),plan:async(e,n)=>{let r=await(0,c.readFile)(n,`utf-8`).catch(()=>void 0);if(r===void 0)return null;let i=ie(r);if(i.warning&&t.r.warn(i.warning),i.content===null)return null;let a=i.content;return{packages:[`-D ${Z(e.cliVersion)}`],execute:async()=>(t.r.info(`Adding Salty-CSS integration to Astro config: `+n),await(0,c.writeFile)(n,a),await S(n),{changed:!0})}}},oe=[[`projectJs`,`eslint.config.js`],[`rootJs`,`eslint.config.js`],[`projectMjs`,`eslint.config.mjs`],[`rootMjs`,`eslint.config.mjs`],[`projectJson`,`.eslintrc.json`],[`rootJson`,`.eslintrc.json`]],se=(e,t)=>oe.map(([n,r])=>(0,s.join)(n.startsWith(`root`)?t:e,r)),ce=(e,t)=>{if(e.includes(`salty-css`))return{content:null};if(t){let t=`import saltyCss from "@salty-css/eslint-config-core/flat";\n${e}`;if(e.includes(`typescript-eslint`))if(t.includes(`.config(`))t=t.replace(`.config(`,`.config(saltyCss,`);else return{content:null,warning:`Could not find the correct place to add the Salty-CSS config for ESLint. Please add it manually.`};else if(t.includes(`export default [`))t=t.replace(`export default [`,`export default [ saltyCss,`);else if(t.includes(`eslintConfig = [`))t=t.replace(`eslintConfig = [`,`eslintConfig = [ saltyCss,`);else return{content:null,warning:`Could not find the correct place to add the Salty-CSS config for ESLint. Please add it manually.`};return{content:t}}let n=JSON.parse(e);return n.extends||=[],n.extends.includes(`@salty-css/core`)||n.extends.push(`@salty-css/core`),{content:JSON.stringify(n,null,2)}},le={name:`eslint`,detect:e=>se(e.projectDir,e.cwd).find(e=>(0,o.existsSync)(e))??null,plan:async(e,n)=>{let r=await(0,c.readFile)(n,`utf-8`).catch(()=>void 0);if(r===void 0)return t.r.error(`Could not read ESLint config file.`),null;let i=ce(r,n.endsWith(`js`));if(i.warning&&t.r.warn(i.warning),i.content===null)return null;let a=i.content;return{packages:[_.eslintConfigCore(e.cliVersion)],execute:async()=>(t.r.info(`Edit file: `+n),await(0,c.writeFile)(n,a),await S(n),{changed:!0})}}},ue=[`next.config.js`,`next.config.cjs`,`next.config.ts`,`next.config.mjs`],de=e=>`@salty-css/next@${e}`,fe=e=>{if(e.includes(`withSaltyCss`))return{content:null};let t=e,n=!1;/\splugins([^=]*)=[^[]\[/.test(t)&&(t=t.replace(/\splugins([^=]*)=[^[]\[/,(e,t)=>` plugins${t}= [withSaltyCss,`),n=!0);let r=t.includes(`module.exports`),i=r?`const { withSaltyCss } = require('@salty-css/next');
|
|
4
|
-
`:`import { withSaltyCss } from '@salty-css/next';
|
|
5
|
-
`;return r&&!n?(t=t.replace(/module.exports = ([^;]+)/,(e,t)=>`module.exports = withSaltyCss(${t})`),n=!0):n||(t=t.replace(/export default ([^;]+)/,(e,t)=>`export default withSaltyCss(${t})`)),{content:i+t}},pe={name:`next`,detect:e=>ue.map(t=>(0,s.join)(e.projectDir,t)).find(e=>(0,o.existsSync)(e))??null,plan:async(e,n)=>{let r=await(0,c.readFile)(n,`utf-8`).catch(()=>void 0);if(r===void 0)return null;let{content:i}=fe(r);return i===null?null:{packages:[`-D ${de(e.cliVersion)}`],execute:async()=>(t.r.info(`Adding Salty-CSS plugin to Next.js config...`),await(0,c.writeFile)(n,i),await S(n),{changed:!0})}}},me=e=>`@salty-css/vite@${e}`,he=e=>e.includes(`saltyPlugin`)?{content:null}:{content:`import { saltyPlugin } from '@salty-css/vite';
|
|
6
|
-
`+e.replace(/(plugins: \[)/,`$1
|
|
7
|
-
saltyPlugin(__dirname),`)},ge=[le,{name:`vite`,detect:e=>{let t=(0,s.join)(e.projectDir,`vite.config.ts`);return(0,o.existsSync)(t)?t:null},plan:async(e,n)=>{let r=await(0,c.readFile)(n,`utf-8`).catch(()=>void 0);if(r===void 0)return null;let{content:i}=he(r);return i===null?null:{packages:[`-D ${me(e.cliVersion)}`],execute:async()=>(t.r.info(`Edit file: `+n),t.r.info(`Adding Salty-CSS plugin to Vite config...`),await(0,c.writeFile)(n,i),await S(n),{changed:!0})}}},pe,ae],_e=async e=>{let t=[];for(let n of ge){let r=await n.detect(e);if(!r)continue;let i=await n.plan(e,r);i&&t.push({name:n.name,configPath:r,plan:i})}return t},ve=async e=>{let t=[];for(let{name:n,configPath:r,plan:i}of e){let e=await i.execute();t.push({name:n,configPath:r,changed:e.changed})}return t},ye={vite:[`dist/**`],next:[`.next/**`,`out/**`]},be=({framework:e,integrations:t,hasSrcDir:n})=>{if(e===`astro`)return{};let r=[...new Set(t.flatMap(e=>ye[e]??[]))],i={};return n&&(i.include=[`src/**`]),r.length&&(i.exclude=r),i},Q=async(e,n,r)=>{let i=(0,s.join)(e,n);if((0,o.existsSync)(i)){t.r.debug(`File already exists: `+i);return}let a=n.split(`/`).slice(0,-1).join(`/`);a&&await(0,c.mkdir)((0,s.join)(e,a),{recursive:!0}),t.r.info(`Creating file: `+i),await(0,c.writeFile)(i,r),await S(i)},xe=async e=>{let n=(0,s.join)(e,`.gitignore`),r=await(0,c.readFile)(n,`utf-8`).catch(()=>void 0);r!==void 0&&(r.includes(`saltygen`)||(t.r.info(`Edit file: `+n),await(0,c.writeFile)(n,r+`
|
|
8
|
-
|
|
9
|
-
# Salty-CSS
|
|
10
|
-
saltygen
|
|
11
|
-
`)))},Se=async(e,n)=>{let r=n??await X(e);if(!r){if(!await G("Could not find a CSS file to import the generated CSS. Do you want to create a new `styles/index.css` file and import it there? (y/N) ")){t.r.warn(`Could not find a CSS file to import the generated CSS. Please add it manually.`);return}let{fileName:n,content:r}=await B(`styles/index.css`);await Q(e,n,r);return}let i=(0,s.join)(e,r),a=await(0,c.readFile)(i,`utf-8`).catch(()=>void 0);if(a===void 0||a.includes(`saltygen`))return;let o=(0,s.relative)((0,s.join)(i,`..`),(0,s.join)(e,`saltygen/index.css`));t.r.info(`Adding global import statement to CSS file: `+i),await(0,c.writeFile)(i,`@import '${o}';\n`+a),await S(i)},Ce=async()=>{let e=await m().catch(()=>{t.n(`Could not read package.json file.`)});if(!e)return;let{pkg:n}=v(e);await h(n)},we=e=>{e.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.`).option(`-y, --yes`,`Skip the install confirmation prompt.`).action(async function(e=`.`){try{let n=this.opts(),r=n.dir??e;if(!r)return t.n(`Project directory must be provided. Add it as the first argument after init command or use the --dir option.`);let i=await k({dir:r,skipInstall:n.skipInstall,yes:n.yes});t.r.info(`Initializing a new Salty-CSS project!`);let a=await L(i);t.r.info(`Detected framework: ${a.name}`);let l=await _e(i);if(!i.skipInstall){let e=[_.core(i.cliVersion),a.runtimePackage(i.cliVersion),...l.flatMap(e=>e.plan.packages)];await W(e,i.yes),await b(...e)}let u=await Promise.all([B(`salty.config.ts`),B(`saltygen/index.css`)]),d=(0,s.join)(i.projectDir,a.srcDirectory);await(0,c.mkdir)(d,{recursive:!0}),await Promise.all(u.map(({fileName:e,content:t})=>Q(d,e,t)));let f=be({framework:a.name,integrations:l.map(e=>e.name),hasSrcDir:(0,o.existsSync)((0,s.join)(i.projectDir,`src`))});await D(i.cwd,i.relativeProjectPath,a,f),await xe(i.cwd),await Se(d,n.cssFile),await ve(l),await Ce(),t.r.info(`Running the build to generate initial CSS...`),await new t.t(d).generateCss(),t.r.info(`🎉 Salty CSS project initialized successfully!`),t.r.info(`Next steps:`),t.r.info("1. Configure variables and templates in `salty.config.ts`"),t.r.info("2. Create a new component with `npx salty-css generate [component-name]`"),t.r.info("3. Run `npx salty-css build` to generate the CSS"),t.r.info(`4. Read about the features in the documentation: https://salty-css.dev`),t.r.info(`5. Star the project on GitHub: https://github.com/margarita-form/salty-css ⭐`)}catch(e){return t.n(e instanceof Error?e.message:String(e))}})},$=async()=>{let e=(0,s.join)(process.cwd(),`package.json`),n=await m(e).catch(e=>t.n(e));if(!n)return t.n(`Could not read package.json file.`);let r={...n.dependencies,...n.devDependencies},i=Object.entries(r).filter(([e])=>e===`salty-css`||e.startsWith(`@salty-css/`));return i.length?i:t.n(`No Salty-CSS packages found in package.json. Make sure you are running update command in the same directory! Used package.json path: `+e)},Te=e=>{e.command(`update [version]`).alias(`up`).description(`Update Salty-CSS packages to the latest or specified version.`).option(`-v, --version <version>`,`Version to update to.`).option(`--legacy-peer-deps <legacyPeerDeps>`,`Use legacy peer dependencies (not recommended).`,!1).option(`-y, --yes`,`Skip confirmation prompts (install and rebuild).`).option(`-d, --dir <dir>`,`Project directory to rebuild after updating.`).action(async function(e=`latest`){let{legacyPeerDeps:n,version:r=e,yes:i=!1,dir:a}=this.opts(),o=await $();if(!o)return t.n(`Could not update Salty-CSS packages as any were found in package.json.`);let s=await g(),c=o.map(([e])=>r===`@`?`${e}@${s.version}`:`${e}@${r.replace(/^@/,``)}`);try{await W(c,i)}catch(e){return t.n(e instanceof Error?e.message:String(e))}n?(t.r.warn(`Using legacy peer dependencies to update packages.`),await b(...c,`--legacy-peer-deps`)):await b(...c);let l=await $();if(!l)return t.n(`Something went wrong while reading the updated packages.`);let u=l.reduce((e,[t,n])=>(e[n]||(e[n]=[]),e[n].push(t),e),{});if(Object.keys(u).length===1){let e=Object.keys(u)[0];t.r.info(`Updated to all Salty CSS packages successfully to ${e.replace(/^\^/,``)}`)}else for(let[e,n]of Object.entries(u))t.r.info(`Updated to ${e.replace(/^\^/,``)}: ${n.join(`, `)}`);let d=a??await T();if(!d){t.r.warn("Skipping rebuild: no project directory configured. Run `salty-css build [dir]` manually.");return}if(!await G(`Rebuild Salty CSS now?`,{yes:i}))return;let f=O(d);t.r.info(`Rebuilding Salty-CSS project...`),await new t.t(f).generateCss(),t.r.info(`Rebuild complete.`)})},Ee=e=>{e.option(`-v, --version`,`Show the current version of Salty-CSS.`).action(async function(){let e=await g();t.r.info(`CLI is running: `+e.version);let n=(0,s.join)(process.cwd(),`package.json`),r=await m(n).catch(e=>t.n(e));if(!r)return;let i={...r.dependencies,...r.devDependencies},a=Object.keys(i).filter(e=>e===`salty-css`||e.startsWith(`@salty-css/`));if(!a.length)return t.n(`No Salty-CSS packages found in package.json. Make sure you are running update command in the same directory! Used package.json path: `+n);for(let e of a)t.r.info(`${e}: ${i[e]}`)})};async function De(){let e=new a.Command;e.name(`salty-css`).description(`Salty-CSS CLI tool to help with annoying configuration tasks.`);let t=await T();we(e),Te(e),Ee(e),A(e,t),V(e,t),e.parseAsync(process.argv)}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return De}});
|
package/dist/maybe.d.ts
DELETED
package/dist/maybe.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"maybe.d.ts","sourceRoot":"","sources":["../src/maybe.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,eAAe,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=`@import url(../saltygen/index.css);`;exports.default=e;
|
|
File without changes
|