ultracite 5.0.20 → 5.0.21

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/index.js CHANGED
@@ -6,8 +6,8 @@ alwaysApply: true
6
6
  ---
7
7
 
8
8
  ${vt.map(e=>`- ${e}`).join(`
9
- `)}`});var We={};u(We,{claude:()=>R});var b,se,R,ne=r(()=>{"use strict";b=require("fs/promises");h();d();se="./.claude/CLAUDE.md",R={exists:()=>o(se),create:async()=>{await(0,b.mkdir)(".claude",{recursive:!0}),await(0,b.writeFile)(se,c)},update:async()=>{await(0,b.mkdir)(".claude",{recursive:!0}),await(0,b.writeFile)(se,c)}}});var Je={};u(Je,{codex:()=>I});var ae,oe,I,ie=r(()=>{"use strict";ae=require("fs/promises");h();d();oe="./AGENTS.md",I={exists:()=>o(oe),create:async()=>{await(0,ae.writeFile)(oe,c)},update:async()=>{await(0,ae.writeFile)(oe,c)}}});var ze={};u(ze,{cursor:()=>P});var D,re,P,ce=r(()=>{"use strict";D=require("fs/promises");h();d();re="./.cursor/rules/ultracite.mdc",P={exists:()=>o(re),create:async()=>{await(0,D.mkdir)(".cursor/rules",{recursive:!0}),await(0,D.writeFile)(re,c)},update:async()=>{await(0,D.mkdir)(".cursor/rules",{recursive:!0}),await(0,D.writeFile)(re,c)}}});var He={};u(He,{husky:()=>v});var qe,y,Ee,Y,v,le=r(()=>{"use strict";qe=require("child_process"),y=require("fs/promises");d();Ee="npx ultracite format",Y="./.husky/pre-commit",v={exists:()=>o(Y),install:e=>{(0,qe.execSync)(`${e} -D husky`)},create:async()=>{await(0,y.mkdir)(".husky",{recursive:!0}),await(0,y.writeFile)(Y,Ee)},update:async()=>{let e=await(0,y.readFile)(Y,"utf-8");await(0,y.writeFile)(Y,`${e}
10
- ${Ee}`)}}});var Ye={};u(Ye,{lint:()=>ue});var Le,Ge,ue,de=r(()=>{"use strict";Le=require("child_process"),Ge=g(require("process")),ue=e=>{try{let t=e.length>0?e.join(" "):"./";(0,Le.execSync)(`npx @biomejs/biome check ${t}`,{stdio:"inherit"})}catch(t){let s=t instanceof Error?t.message:"Unknown error";console.error("Failed to run Ultracite:",s),Ge.default.exit(1)}}});var Ke={};u(Ke,{packageManager:()=>K});var _,_e,K,pe=r(()=>{"use strict";_=require("@clack/prompts");d();_e=[{hint:"Recommended",label:"pnpm",value:"pnpm add",lockfile:"pnpm-lock.yaml",monorepoSuffix:"-w"},{label:"bun",value:"bun add",lockfile:"bun.lockb",monorepoSuffix:""},{label:"yarn",value:"yarn add",lockfile:"yarn.lock",monorepoSuffix:"-W"},{label:"npm",value:"npm install",lockfile:"package-lock.json",monorepoSuffix:"--workspace ."}],K={get:async()=>{let e=await L();e&&_.log.info("Monorepo detected, updating install command to include workspace flag");for(let t of _e)if(await o(t.lockfile))return e&&t.monorepoSuffix?`${t.value} ${t.monorepoSuffix}`:t.value;return null},select:async()=>{let e=await L(),t=await(0,_.select)({initialValue:"pnpm",message:"Which package manager do you use?",options:_e.map(s=>({label:s.label,value:e?`${s.value} ${s.monorepoSuffix}`:s.value}))});return typeof t!="string"?null:t}}});var Ze={};u(Ze,{title:()=>me});var me,fe=r(()=>{"use strict";me=`
9
+ `)}`});var Je={};u(Je,{claude:()=>R});var b,se,R,ne=r(()=>{"use strict";b=require("fs/promises");h();d();se="./.claude/CLAUDE.md",R={exists:()=>o(se),create:async()=>{await(0,b.mkdir)(".claude",{recursive:!0}),await(0,b.writeFile)(se,c)},update:async()=>{await(0,b.mkdir)(".claude",{recursive:!0}),await(0,b.writeFile)(se,c)}}});var We={};u(We,{codex:()=>I});var ae,oe,I,ie=r(()=>{"use strict";ae=require("fs/promises");h();d();oe="./AGENTS.md",I={exists:()=>o(oe),create:async()=>{await(0,ae.writeFile)(oe,c)},update:async()=>{await(0,ae.writeFile)(oe,c)}}});var ze={};u(ze,{cursor:()=>P});var D,re,P,ce=r(()=>{"use strict";D=require("fs/promises");h();d();re="./.cursor/rules/ultracite.mdc",P={exists:()=>o(re),create:async()=>{await(0,D.mkdir)(".cursor/rules",{recursive:!0}),await(0,D.writeFile)(re,c)},update:async()=>{await(0,D.mkdir)(".cursor/rules",{recursive:!0}),await(0,D.writeFile)(re,c)}}});var He={};u(He,{husky:()=>v});var qe,y,Ee,Y,v,le=r(()=>{"use strict";qe=require("child_process"),y=require("fs/promises");d();Ee="npx ultracite format",Y="./.husky/pre-commit",v={exists:()=>o(Y),install:e=>{(0,qe.execSync)(`${e} -D husky`)},create:async()=>{await(0,y.mkdir)(".husky",{recursive:!0}),await(0,y.writeFile)(Y,Ee)},update:async()=>{let e=await(0,y.readFile)(Y,"utf-8");await(0,y.writeFile)(Y,`${e}
10
+ ${Ee}`)}}});var Ye={};u(Ye,{lint:()=>ue});var Le,Ge,ue,de=r(()=>{"use strict";Le=require("child_process"),Ge=g(require("process")),ue=e=>{try{let t=e.length>0?e.join(" "):"./";(0,Le.execSync)(`npx @biomejs/biome check ${t}`,{stdio:"inherit"})}catch(t){let s=t instanceof Error?t.message:"Unknown error";console.error("Failed to run Ultracite:",s),Ge.default.exit(1)}}});var Ke={};u(Ke,{packageManager:()=>K});var _,_e,K,pe=r(()=>{"use strict";_=require("@clack/prompts");d();_e=[{hint:"Recommended",label:"pnpm",value:"pnpm add",lockfile:"pnpm-lock.yaml",monorepoSuffix:"-w"},{label:"bun",value:"bun add",lockfile:"bun.lockb",monorepoSuffix:""},{label:"yarn",value:"yarn add",lockfile:"yarn.lock",monorepoSuffix:""},{label:"npm",value:"npm install",lockfile:"package-lock.json",monorepoSuffix:"--workspace ."}],K={get:async()=>{let e=await L();e&&_.log.info("Monorepo detected, updating install command to include workspace flag");for(let t of _e)if(await o(t.lockfile))return e&&t.monorepoSuffix?`${t.value} ${t.monorepoSuffix}`:t.value;return null},select:async()=>{let e=await L(),t=await(0,_.select)({initialValue:"pnpm",message:"Which package manager do you use?",options:_e.map(s=>({label:s.label,value:e&&s.monorepoSuffix?`${s.value} ${s.monorepoSuffix}`:s.value}))});return typeof t!="string"?null:t}}});var Ze={};u(Ze,{title:()=>me});var me,fe=r(()=>{"use strict";me=`
11
11
  888 888 888 88888888888 8888888b. d8888 .d8888b. 8888888 88888888888 8888888888
12
12
  888 888 888 888 888 Y88b d88888 d88P Y88b 888 888 888
13
13
  888 888 888 888 888 888 d88P888 888 888 888 888 888
@@ -16,12 +16,12 @@ ${Ee}`)}}});var Ye={};u(Ye,{lint:()=>ue});var Le,Ge,ue,de=r(()=>{"use strict";Le
16
16
  888 888 888 888 888 T88b d88P 888 888 888 888 888 888
17
17
  Y88b. .d88P 888 888 888 T88b d8888888888 Y88b d88P 888 888 888
18
18
  "Y88888P" 88888888 888 888 T88b d88P 888 "Y8888P" 8888888 888 8888888888
19
- `});var Qe={};u(Qe,{tsconfig:()=>O});var N,Ve,Xe,Be,Z,O,ge=r(()=>{"use strict";N=require("fs/promises"),Ve=g(require("deepmerge")),Xe=require("jsonc-parser");d();Be={compilerOptions:{strictNullChecks:!0}},Z="./tsconfig.json",O={exists:()=>o(Z),create:()=>(0,N.writeFile)(Z,JSON.stringify(Be,null,2)),update:async()=>{let e=await(0,N.readFile)(Z,"utf-8"),s=(0,Xe.parse)(e)||{},n=(0,Ve.default)(s,Be);await(0,N.writeFile)(Z,JSON.stringify(n,null,2))}}});var et={};u(et,{vscodeCopilot:()=>$});var k,he,$,ye=r(()=>{"use strict";k=require("fs/promises");h();d();he="./.github/copilot-instructions.md",$={exists:()=>o(he),create:async()=>{await(0,k.mkdir)(".github",{recursive:!0}),await(0,k.writeFile)(he,c)},update:async()=>{await(0,k.mkdir)(".github",{recursive:!0}),await(0,k.writeFile)(he,c)}}});var ot={};u(ot,{vscode:()=>T});var w,st,nt,tt,B,T,we=r(()=>{"use strict";w=require("fs/promises"),st=g(require("deepmerge")),nt=require("jsonc-parser");d();tt={"editor.defaultFormatter":"esbenp.prettier-vscode","[javascript][typescript][javascriptreact][typescriptreact][json][jsonc][css][graphql]":{"editor.defaultFormatter":"biomejs.biome"},"typescript.tsdk":"node_modules/typescript/lib","editor.formatOnSave":!0,"editor.formatOnPaste":!0,"emmet.showExpandedAbbreviation":"never","editor.codeActionsOnSave":{"source.fixAll.biome":"explicit","source.organizeImports.biome":"explicit"}},B="./.vscode/settings.json",T={exists:()=>o(B),create:async()=>{await(0,w.mkdir)(".vscode",{recursive:!0}),await(0,w.writeFile)(B,JSON.stringify(tt,null,2))},update:async()=>{let e=await(0,w.readFile)(B,"utf-8"),s=(0,nt.parse)(e)||{},n=(0,st.default)(s,tt);await(0,w.writeFile)(B,JSON.stringify(n,null,2))}}});var at={};u(at,{windsurf:()=>W});var C,xe,W,be=r(()=>{"use strict";C=require("fs/promises");h();d();xe="./.windsurf/rules/ultracite.md",W={exists:()=>o(xe),create:async()=>{await(0,C.mkdir)(".windsurf/rules",{recursive:!0}),await(0,C.writeFile)(xe,c)},update:async()=>{await(0,C.mkdir)(".windsurf/rules",{recursive:!0}),await(0,C.writeFile)(xe,c)}}});var it={};u(it,{zed:()=>J});var S,j,J,De=r(()=>{"use strict";S=require("fs/promises");h();d();j="./.rules",J={exists:()=>o(j),create:async()=>{await(0,S.writeFile)(j,c)},update:async()=>{if(!await o(j)){await(0,S.writeFile)(j,c);return}let e=await(0,S.readFile)(j,"utf-8");e.includes(c.trim())||await(0,S.writeFile)(j,`${e}
19
+ `});var Qe={};u(Qe,{tsconfig:()=>O});var N,Ve,Xe,Be,Z,O,ge=r(()=>{"use strict";N=require("fs/promises"),Ve=g(require("deepmerge")),Xe=require("jsonc-parser");d();Be={compilerOptions:{strictNullChecks:!0}},Z="./tsconfig.json",O={exists:()=>o(Z),create:()=>(0,N.writeFile)(Z,JSON.stringify(Be,null,2)),update:async()=>{let e=await(0,N.readFile)(Z,"utf-8"),s=(0,Xe.parse)(e)||{},n=(0,Ve.default)(s,Be);await(0,N.writeFile)(Z,JSON.stringify(n,null,2))}}});var et={};u(et,{vscodeCopilot:()=>$});var k,he,$,ye=r(()=>{"use strict";k=require("fs/promises");h();d();he="./.github/copilot-instructions.md",$={exists:()=>o(he),create:async()=>{await(0,k.mkdir)(".github",{recursive:!0}),await(0,k.writeFile)(he,c)},update:async()=>{await(0,k.mkdir)(".github",{recursive:!0}),await(0,k.writeFile)(he,c)}}});var ot={};u(ot,{vscode:()=>T});var w,st,nt,tt,B,T,we=r(()=>{"use strict";w=require("fs/promises"),st=g(require("deepmerge")),nt=require("jsonc-parser");d();tt={"editor.defaultFormatter":"esbenp.prettier-vscode","[javascript][typescript][javascriptreact][typescriptreact][json][jsonc][css][graphql]":{"editor.defaultFormatter":"biomejs.biome"},"typescript.tsdk":"node_modules/typescript/lib","editor.formatOnSave":!0,"editor.formatOnPaste":!0,"emmet.showExpandedAbbreviation":"never","editor.codeActionsOnSave":{"source.fixAll.biome":"explicit","source.organizeImports.biome":"explicit"}},B="./.vscode/settings.json",T={exists:()=>o(B),create:async()=>{await(0,w.mkdir)(".vscode",{recursive:!0}),await(0,w.writeFile)(B,JSON.stringify(tt,null,2))},update:async()=>{let e=await(0,w.readFile)(B,"utf-8"),s=(0,nt.parse)(e)||{},n=(0,st.default)(s,tt);await(0,w.writeFile)(B,JSON.stringify(n,null,2))}}});var at={};u(at,{windsurf:()=>J});var C,xe,J,be=r(()=>{"use strict";C=require("fs/promises");h();d();xe="./.windsurf/rules/ultracite.md",J={exists:()=>o(xe),create:async()=>{await(0,C.mkdir)(".windsurf/rules",{recursive:!0}),await(0,C.writeFile)(xe,c)},update:async()=>{await(0,C.mkdir)(".windsurf/rules",{recursive:!0}),await(0,C.writeFile)(xe,c)}}});var it={};u(it,{zed:()=>W});var S,j,W,De=r(()=>{"use strict";S=require("fs/promises");h();d();j="./.rules",W={exists:()=>o(j),create:async()=>{await(0,S.writeFile)(j,c)},update:async()=>{if(!await o(j)){await(0,S.writeFile)(j,c);return}let e=await(0,S.readFile)(j,"utf-8");e.includes(c.trim())||await(0,S.writeFile)(j,`${e}
20
20
 
21
- ${c}`)}}});var Ct,ve=r(()=>{Ct=Ue({"./biome.ts":()=>(te(),l(Te)),"./claude.ts":()=>(ne(),l(We)),"./codex.ts":()=>(ie(),l(Je)),"./cursor.ts":()=>(ce(),l(ze)),"./format.ts":()=>(ee(),l(Re)),"./husky.ts":()=>(le(),l(He)),"./index.ts":()=>(lt(),l(kt)),"./initialize.ts":()=>(Ce(),l(ct)),"./lint-staged.ts":()=>(ke(),l(rt)),"./lint.ts":()=>(de(),l(Ye)),"./package-manager.ts":()=>(pe(),l(Ke)),"./title.ts":()=>(fe(),l(Ze)),"./tsconfig.ts":()=>(ge(),l(Qe)),"./utils.ts":()=>(d(),l(Pe)),"./vscode-copilot.ts":()=>(ye(),l(et)),"./vscode-settings.ts":()=>(we(),l(ot)),"./windsurf.ts":()=>(be(),l(at)),"./zed.ts":()=>(De(),l(it))})});var rt={};u(rt,{lintStaged:()=>A});var dt,p,pt,U,V,f,ut,jt,St,Ut,At,Mt,Ft,Rt,It,Pt,je,Nt,A,ke=r(()=>{"use strict";dt=require("child_process"),p=require("fs/promises"),pt=require("url"),U=g(require("deepmerge")),V=require("jsonc-parser");d();ve();f={"*.{js,jsx,ts,tsx,json,jsonc,css,scss,md,mdx}":["npx ultracite format"]},ut=["./package.json","./.lintstagedrc.json","./.lintstagedrc.js","./.lintstagedrc.cjs","./.lintstagedrc.mjs","./lint-staged.config.js","./lint-staged.config.cjs","./lint-staged.config.mjs","./.lintstagedrc.yaml","./.lintstagedrc.yml","./.lintstagedrc"],jt=(e,t,s,n)=>{let a=e.trim();if(a.includes(":")&&!a.startsWith("-")){s&&n.length>0&&(t[s]=n);let[m,...E]=a.split(":"),x=E.join(":").trim(),X=m.trim().replace(/['"]/g,"");return x&&x!==""?(x.startsWith("[")&&x.endsWith("]")?t[X]=x.slice(1,-1).split(",").map(ht=>ht.trim().replace(/['"]/g,"")):t[X]=x.replace(/['"]/g,""),{newCurrentKey:null,newCurrentArray:[]}):{newCurrentKey:X,newCurrentArray:[]}}if(a.startsWith("-")&&s){let m=[...n,a.slice(1).trim().replace(/['"]/g,"")];return{newCurrentKey:s,newCurrentArray:m}}return{newCurrentKey:s,newCurrentArray:n}},St=e=>{let t=e.split(`
21
+ ${c}`)}}});var Ct,ve=r(()=>{Ct=Ue({"./biome.ts":()=>(te(),l(Te)),"./claude.ts":()=>(ne(),l(Je)),"./codex.ts":()=>(ie(),l(We)),"./cursor.ts":()=>(ce(),l(ze)),"./format.ts":()=>(ee(),l(Re)),"./husky.ts":()=>(le(),l(He)),"./index.ts":()=>(lt(),l(kt)),"./initialize.ts":()=>(Ce(),l(ct)),"./lint-staged.ts":()=>(ke(),l(rt)),"./lint.ts":()=>(de(),l(Ye)),"./package-manager.ts":()=>(pe(),l(Ke)),"./title.ts":()=>(fe(),l(Ze)),"./tsconfig.ts":()=>(ge(),l(Qe)),"./utils.ts":()=>(d(),l(Pe)),"./vscode-copilot.ts":()=>(ye(),l(et)),"./vscode-settings.ts":()=>(we(),l(ot)),"./windsurf.ts":()=>(be(),l(at)),"./zed.ts":()=>(De(),l(it))})});var rt={};u(rt,{lintStaged:()=>A});var dt,p,pt,U,V,f,ut,jt,St,Ut,At,Mt,Ft,Rt,It,Pt,je,Nt,A,ke=r(()=>{"use strict";dt=require("child_process"),p=require("fs/promises"),pt=require("url"),U=g(require("deepmerge")),V=require("jsonc-parser");d();ve();f={"*.{js,jsx,ts,tsx,json,jsonc,css,scss,md,mdx}":["npx ultracite format"]},ut=["./package.json","./.lintstagedrc.json","./.lintstagedrc.js","./.lintstagedrc.cjs","./.lintstagedrc.mjs","./lint-staged.config.js","./lint-staged.config.cjs","./lint-staged.config.mjs","./.lintstagedrc.yaml","./.lintstagedrc.yml","./.lintstagedrc"],jt=(e,t,s,n)=>{let a=e.trim();if(a.includes(":")&&!a.startsWith("-")){s&&n.length>0&&(t[s]=n);let[m,...E]=a.split(":"),x=E.join(":").trim(),X=m.trim().replace(/['"]/g,"");return x&&x!==""?(x.startsWith("[")&&x.endsWith("]")?t[X]=x.slice(1,-1).split(",").map(ht=>ht.trim().replace(/['"]/g,"")):t[X]=x.replace(/['"]/g,""),{newCurrentKey:null,newCurrentArray:[]}):{newCurrentKey:X,newCurrentArray:[]}}if(a.startsWith("-")&&s){let m=[...n,a.slice(1).trim().replace(/['"]/g,"")];return{newCurrentKey:s,newCurrentArray:m}}return{newCurrentKey:s,newCurrentArray:n}},St=e=>{let t=e.split(`
22
22
  `).filter(m=>m.trim()&&!m.trim().startsWith("#")),s={},n=null,a=[];for(let m of t){let E=jt(m,s,n,a);n=E.newCurrentKey,a=E.newCurrentArray}return n&&a.length>0&&(s[n]=a),s},Ut=e=>{let t="";for(let[s,n]of Object.entries(e))if(Array.isArray(n)){t+=`${s}:
23
23
  `;for(let a of n)t+=` - '${a}'
24
24
  `}else t+=`${s}: '${n}'
25
25
  `;return t},At=async()=>{try{let e=(0,V.parse)(await(0,p.readFile)("./package.json","utf-8"));return e?e.type==="module":!1}catch{return!1}},Mt=async()=>{let e=(0,V.parse)(await(0,p.readFile)("./package.json","utf-8"));e&&(e["lint-staged"]?e["lint-staged"]=(0,U.default)(e["lint-staged"],f):e["lint-staged"]=f,await(0,p.writeFile)("./package.json",JSON.stringify(e,null,2)))},Ft=async e=>{let t=await(0,p.readFile)(e,"utf-8"),s=(0,V.parse)(t);if(!s)return;let n=(0,U.default)(s,f);await(0,p.writeFile)(e,JSON.stringify(n,null,2))},Rt=async e=>{let t=await(0,p.readFile)(e,"utf-8"),s=St(t);if(!s)return;let n=(0,U.default)(s,f);await(0,p.writeFile)(e,Ut(n))},It=async e=>{let n=(await import((0,pt.pathToFileURL)(e).href)).default||{},a=(0,U.default)(n,f),m=`export default ${JSON.stringify(a,null,2)};
26
26
  `;await(0,p.writeFile)(e,m)},Pt=async e=>{delete require.cache[require.resolve(`./${e}`)];let t=Ct(`./${e}`),s=(0,U.default)(t,f),n=`module.exports = ${JSON.stringify(s,null,2)};
27
- `;await(0,p.writeFile)(e,n)},je=async()=>{await(0,p.writeFile)(".lintstagedrc.json",JSON.stringify(f,null,2))},Nt=async e=>{if(e==="./package.json"){await Mt();return}if(e.endsWith(".json")||e==="./.lintstagedrc"){await Ft(e);return}if(e.endsWith(".yaml")||e.endsWith(".yml")){await Rt(e);return}let t=await At();if(e.endsWith(".mjs")||e.endsWith(".js")&&t){try{await It(e)}catch{await je()}return}if(e.endsWith(".cjs")||e.endsWith(".js")&&!t)try{await Pt(e)}catch{await je()}},A={exists:async()=>{for(let e of ut)if(await o(e))return!0;return!1},install:e=>{(0,dt.execSync)(`${e} -D lint-staged`)},create:async()=>{await(0,p.writeFile)(".lintstagedrc.json",JSON.stringify(f,null,2))},update:async()=>{let e=null;for(let t of ut)if(await o(t)){e=t;break}if(!e){await je();return}await Nt(e)}}});var ct={};u(ct,{initialize:()=>Se});var mt,ft,i,Ot,$t,Tt,Wt,Jt,zt,Et,qt,Ht,Lt,Gt,Yt,Se,Ce=r(()=>{"use strict";mt=require("child_process"),ft=g(require("process")),i=require("@clack/prompts");te();ne();ie();ce();le();ke();pe();fe();ge();ye();we();be();De();Ot=e=>{let t=(0,i.spinner)();t.start("Installing dependencies..."),(0,mt.execSync)(`${e} -D -E ultracite @biomejs/biome@2.0.5`),t.stop("Dependencies installed.")},$t=async()=>{let e=(0,i.spinner)();if(e.start("Checking for tsconfig.json..."),await O.exists()){e.message("tsconfig.json found, updating..."),await O.update(),e.stop("tsconfig.json updated.");return}e.message("tsconfig.json not found, creating..."),await O.create(),e.stop("tsconfig.json created.")},Tt=async()=>{let e=(0,i.spinner)();if(e.start("Checking for .vscode/settings.json..."),await T.exists()){e.message("settings.json found, updating..."),await T.update(),e.stop("settings.json updated.");return}e.message("settings.json not found, creating..."),await T.create(),e.stop("settings.json created.")},Wt=async()=>{let e=(0,i.spinner)();if(e.start("Checking for biome.jsonc..."),await F.exists()){e.message("biome.jsonc found, updating..."),await F.update(),e.stop("biome.jsonc updated.");return}e.message("biome.jsonc not found, creating..."),await F.create(),e.stop("biome.jsonc created.")},Jt=async e=>{let t=(0,i.spinner)();if(t.start("Initializing pre-commit hooks..."),t.message("Installing Husky..."),v.install(e),await v.exists()){t.message("Pre-commit hook found, updating..."),await v.update(),t.stop("Pre-commit hook updated.");return}t.message("Updating pre-commit hook..."),t.message("Pre-commit hook not found, creating..."),await v.create(),t.stop("Pre-commit hook created.")},zt=async e=>{let t=(0,i.spinner)();if(t.start("Initializing lint-staged..."),t.message("Installing lint-staged..."),A.install(e),await A.exists()){t.message("lint-staged found, updating..."),await A.update(),t.stop("lint-staged updated.");return}t.message("lint-staged not found, creating..."),await A.create(),t.stop("lint-staged created.")},Et=async()=>{let e=(0,i.spinner)();if(e.start("Checking for GitHub Copilot rules..."),await $.exists()){e.message("GitHub Copilot rules found, updating..."),await $.update(),e.stop("GitHub Copilot rules updated.");return}e.message("GitHub Copilot rules not found, creating..."),await $.create(),e.stop("GitHub Copilot rules created.")},qt=async()=>{let e=(0,i.spinner)();if(e.start("Checking for Cursor rules..."),await P.exists()){e.message("Cursor rules found, updating..."),await P.update(),e.stop("Cursor rules updated.");return}e.message("Cursor rules not found, creating..."),await P.create(),e.stop("Cursor rules created.")},Ht=async()=>{let e=(0,i.spinner)();if(e.start("Checking for Windsurf rules..."),await W.exists()){e.message("Windsurf rules found, updating..."),await W.update(),e.stop("Windsurf rules updated.");return}e.message("Windsurf rules not found, creating..."),await W.create(),e.stop("Windsurf rules created.")},Lt=async()=>{let e=(0,i.spinner)();if(e.start("Checking for Zed rules..."),await J.exists()){e.message("Zed rules found, updating..."),await J.update(),e.stop("Zed rules updated.");return}e.message("Zed rules not found, creating..."),await J.create(),e.stop("Zed rules created.")},Gt=async()=>{let e=(0,i.spinner)();if(e.start("Checking for Claude Code rules..."),await R.exists()){e.message("Claude Code rules found, updating..."),await R.update(),e.stop("Claude Code rules updated.");return}e.message("Claude Code rules not found, creating..."),await R.create(),e.stop("Claude Code rules created.")},Yt=async()=>{let e=(0,i.spinner)();if(e.start("Checking for OpenAI Codex rules..."),await I.exists()){e.message("OpenAI Codex rules found, updating..."),await I.update(),e.stop("OpenAI Codex rules updated.");return}e.message("OpenAI Codex rules not found, creating..."),await I.create(),e.stop("OpenAI Codex rules created.")},Se=async()=>{(0,i.intro)(me);try{let e=await K.get();if(e?i.log.info(`Detected lockfile, using ${e}`):e=await K.select(),!e||typeof e!="string")throw new Error("No package manager selected");let t=await(0,i.multiselect)({message:"Which editor rules do you want to enable (optional)?",options:[{label:"GitHub Copilot (VSCode)",value:"vscode-copilot"},{label:"Cursor",value:"cursor"},{label:"Windsurf",value:"windsurf"},{label:"Zed",value:"zed"},{label:"Claude Code",value:"claude"},{label:"OpenAI Codex",value:"codex"}],required:!1}),s=await(0,i.multiselect)({message:"Would you like any of the following (optional)?",options:[{label:"Pre-commit hook with Husky",value:"precommit-hooks"},{label:"Lint-staged",value:"lint-staged"}],required:!1});Ot(e),await $t(),await Tt(),await Wt(),Array.isArray(t)&&(t.includes("vscode-copilot")&&await Et(),t.includes("cursor")&&await qt(),t.includes("windsurf")&&await Ht(),t.includes("zed")&&await Lt(),t.includes("claude")&&await Gt(),t.includes("codex")&&await Yt()),Array.isArray(s)&&(s.includes("precommit-hooks")&&await Jt(e),s.includes("lint-staged")&&await zt(e)),i.log.success("Successfully initialized Ultracite configuration!")}catch(e){let t=e instanceof Error?e.message:"Unknown error";i.log.error(`Failed to initialize Ultracite configuration: ${t}`),ft.default.exit(1)}}});var kt={};var gt,z,lt=r(()=>{gt=require("commander");ee();Ce();de();z=new gt.Command;z.name("Ultracite").description("Ship code faster and with more confidence.");z.command("init").description("Initialize Ultracite in the current directory").action(Se);z.command("lint").description("Run Biome linter without fixing files").argument("[files...]","specific files to lint (optional)").action(ue);z.command("format").description("Run Biome linter and fixes files").argument("[files...]","specific files to format (optional)").option("--unsafe","apply unsafe fixes").action(Q);z.parse()});lt();
27
+ `;await(0,p.writeFile)(e,n)},je=async()=>{await(0,p.writeFile)(".lintstagedrc.json",JSON.stringify(f,null,2))},Nt=async e=>{if(e==="./package.json"){await Mt();return}if(e.endsWith(".json")||e==="./.lintstagedrc"){await Ft(e);return}if(e.endsWith(".yaml")||e.endsWith(".yml")){await Rt(e);return}let t=await At();if(e.endsWith(".mjs")||e.endsWith(".js")&&t){try{await It(e)}catch{await je()}return}if(e.endsWith(".cjs")||e.endsWith(".js")&&!t)try{await Pt(e)}catch{await je()}},A={exists:async()=>{for(let e of ut)if(await o(e))return!0;return!1},install:e=>{(0,dt.execSync)(`${e} -D lint-staged`)},create:async()=>{await(0,p.writeFile)(".lintstagedrc.json",JSON.stringify(f,null,2))},update:async()=>{let e=null;for(let t of ut)if(await o(t)){e=t;break}if(!e){await je();return}await Nt(e)}}});var ct={};u(ct,{initialize:()=>Se});var mt,ft,i,Ot,$t,Tt,Jt,Wt,zt,Et,qt,Ht,Lt,Gt,Yt,Se,Ce=r(()=>{"use strict";mt=require("child_process"),ft=g(require("process")),i=require("@clack/prompts");te();ne();ie();ce();le();ke();pe();fe();ge();ye();we();be();De();Ot=e=>{let t=(0,i.spinner)();t.start("Installing dependencies..."),(0,mt.execSync)(`${e} -D -E ultracite @biomejs/biome@2.0.5`),t.stop("Dependencies installed.")},$t=async()=>{let e=(0,i.spinner)();if(e.start("Checking for tsconfig.json..."),await O.exists()){e.message("tsconfig.json found, updating..."),await O.update(),e.stop("tsconfig.json updated.");return}e.message("tsconfig.json not found, creating..."),await O.create(),e.stop("tsconfig.json created.")},Tt=async()=>{let e=(0,i.spinner)();if(e.start("Checking for .vscode/settings.json..."),await T.exists()){e.message("settings.json found, updating..."),await T.update(),e.stop("settings.json updated.");return}e.message("settings.json not found, creating..."),await T.create(),e.stop("settings.json created.")},Jt=async()=>{let e=(0,i.spinner)();if(e.start("Checking for biome.jsonc..."),await F.exists()){e.message("biome.jsonc found, updating..."),await F.update(),e.stop("biome.jsonc updated.");return}e.message("biome.jsonc not found, creating..."),await F.create(),e.stop("biome.jsonc created.")},Wt=async e=>{let t=(0,i.spinner)();if(t.start("Initializing pre-commit hooks..."),t.message("Installing Husky..."),v.install(e),await v.exists()){t.message("Pre-commit hook found, updating..."),await v.update(),t.stop("Pre-commit hook updated.");return}t.message("Updating pre-commit hook..."),t.message("Pre-commit hook not found, creating..."),await v.create(),t.stop("Pre-commit hook created.")},zt=async e=>{let t=(0,i.spinner)();if(t.start("Initializing lint-staged..."),t.message("Installing lint-staged..."),A.install(e),await A.exists()){t.message("lint-staged found, updating..."),await A.update(),t.stop("lint-staged updated.");return}t.message("lint-staged not found, creating..."),await A.create(),t.stop("lint-staged created.")},Et=async()=>{let e=(0,i.spinner)();if(e.start("Checking for GitHub Copilot rules..."),await $.exists()){e.message("GitHub Copilot rules found, updating..."),await $.update(),e.stop("GitHub Copilot rules updated.");return}e.message("GitHub Copilot rules not found, creating..."),await $.create(),e.stop("GitHub Copilot rules created.")},qt=async()=>{let e=(0,i.spinner)();if(e.start("Checking for Cursor rules..."),await P.exists()){e.message("Cursor rules found, updating..."),await P.update(),e.stop("Cursor rules updated.");return}e.message("Cursor rules not found, creating..."),await P.create(),e.stop("Cursor rules created.")},Ht=async()=>{let e=(0,i.spinner)();if(e.start("Checking for Windsurf rules..."),await J.exists()){e.message("Windsurf rules found, updating..."),await J.update(),e.stop("Windsurf rules updated.");return}e.message("Windsurf rules not found, creating..."),await J.create(),e.stop("Windsurf rules created.")},Lt=async()=>{let e=(0,i.spinner)();if(e.start("Checking for Zed rules..."),await W.exists()){e.message("Zed rules found, updating..."),await W.update(),e.stop("Zed rules updated.");return}e.message("Zed rules not found, creating..."),await W.create(),e.stop("Zed rules created.")},Gt=async()=>{let e=(0,i.spinner)();if(e.start("Checking for Claude Code rules..."),await R.exists()){e.message("Claude Code rules found, updating..."),await R.update(),e.stop("Claude Code rules updated.");return}e.message("Claude Code rules not found, creating..."),await R.create(),e.stop("Claude Code rules created.")},Yt=async()=>{let e=(0,i.spinner)();if(e.start("Checking for OpenAI Codex rules..."),await I.exists()){e.message("OpenAI Codex rules found, updating..."),await I.update(),e.stop("OpenAI Codex rules updated.");return}e.message("OpenAI Codex rules not found, creating..."),await I.create(),e.stop("OpenAI Codex rules created.")},Se=async()=>{(0,i.intro)(me);try{let e=await K.get();if(e?i.log.info(`Detected lockfile, using ${e}`):e=await K.select(),!e||typeof e!="string")throw new Error("No package manager selected");let t=await(0,i.multiselect)({message:"Which editor rules do you want to enable (optional)?",options:[{label:"GitHub Copilot (VSCode)",value:"vscode-copilot"},{label:"Cursor",value:"cursor"},{label:"Windsurf",value:"windsurf"},{label:"Zed",value:"zed"},{label:"Claude Code",value:"claude"},{label:"OpenAI Codex",value:"codex"}],required:!1}),s=await(0,i.multiselect)({message:"Would you like any of the following (optional)?",options:[{label:"Pre-commit hook with Husky",value:"precommit-hooks"},{label:"Lint-staged",value:"lint-staged"}],required:!1});Ot(e),await $t(),await Tt(),await Jt(),Array.isArray(t)&&(t.includes("vscode-copilot")&&await Et(),t.includes("cursor")&&await qt(),t.includes("windsurf")&&await Ht(),t.includes("zed")&&await Lt(),t.includes("claude")&&await Gt(),t.includes("codex")&&await Yt()),Array.isArray(s)&&(s.includes("precommit-hooks")&&await Wt(e),s.includes("lint-staged")&&await zt(e)),i.log.success("Successfully initialized Ultracite configuration!")}catch(e){let t=e instanceof Error?e.message:"Unknown error";i.log.error(`Failed to initialize Ultracite configuration: ${t}`),ft.default.exit(1)}}});var kt={};var gt,z,lt=r(()=>{gt=require("commander");ee();Ce();de();z=new gt.Command;z.name("Ultracite").description("Ship code faster and with more confidence.");z.command("init").description("Initialize Ultracite in the current directory").action(Se);z.command("lint").description("Run Biome linter without fixing files").argument("[files...]","specific files to lint (optional)").action(ue);z.command("format").description("Run Biome linter and fixes files").argument("[files...]","specific files to format (optional)").option("--unsafe","apply unsafe fixes").action(Q);z.parse()});lt();
package/dist/index.mjs CHANGED
@@ -7,7 +7,7 @@ alwaysApply: true
7
7
 
8
8
  ${ht.map(e=>`- ${e}`).join(`
9
9
  `)}`});var Se={};l(Se,{claude:()=>D});import{mkdir as Ce,writeFile as je}from"fs/promises";var G,D,Y=i(()=>{"use strict";f();u();G="./.claude/CLAUDE.md",D={exists:()=>o(G),create:async()=>{await Ce(".claude",{recursive:!0}),await je(G,r)},update:async()=>{await Ce(".claude",{recursive:!0}),await je(G,r)}}});var Ae={};l(Ae,{codex:()=>v});import{writeFile as Ue}from"fs/promises";var _,v,K=i(()=>{"use strict";f();u();_="./AGENTS.md",v={exists:()=>o(_),create:async()=>{await Ue(_,r)},update:async()=>{await Ue(_,r)}}});var Re={};l(Re,{cursor:()=>k});import{mkdir as Me,writeFile as Fe}from"fs/promises";var Z,k,B=i(()=>{"use strict";f();u();Z="./.cursor/rules/ultracite.mdc",k={exists:()=>o(Z),create:async()=>{await Me(".cursor/rules",{recursive:!0}),await Fe(Z,r)},update:async()=>{await Me(".cursor/rules",{recursive:!0}),await Fe(Z,r)}}});var Ne={};l(Ne,{husky:()=>y});import{execSync as yt}from"child_process";import{mkdir as wt,readFile as xt,writeFile as Ie}from"fs/promises";var Pe,N,y,V=i(()=>{"use strict";u();Pe="npx ultracite format",N="./.husky/pre-commit",y={exists:()=>o(N),install:e=>{yt(`${e} -D husky`)},create:async()=>{await wt(".husky",{recursive:!0}),await Ie(N,Pe)},update:async()=>{let e=await xt(N,"utf-8");await Ie(N,`${e}
10
- ${Pe}`)}}});var Oe={};l(Oe,{lint:()=>X});import{execSync as bt}from"child_process";import Dt from"process";var X,Q=i(()=>{"use strict";X=e=>{try{let t=e.length>0?e.join(" "):"./";bt(`npx @biomejs/biome check ${t}`,{stdio:"inherit"})}catch(t){let s=t instanceof Error?t.message:"Unknown error";console.error("Failed to run Ultracite:",s),Dt.exit(1)}}});var Te={};l(Te,{packageManager:()=>O});import{log as vt,select as kt}from"@clack/prompts";var $e,O,ee=i(()=>{"use strict";u();$e=[{hint:"Recommended",label:"pnpm",value:"pnpm add",lockfile:"pnpm-lock.yaml",monorepoSuffix:"-w"},{label:"bun",value:"bun add",lockfile:"bun.lockb",monorepoSuffix:""},{label:"yarn",value:"yarn add",lockfile:"yarn.lock",monorepoSuffix:"-W"},{label:"npm",value:"npm install",lockfile:"package-lock.json",monorepoSuffix:"--workspace ."}],O={get:async()=>{let e=await I();e&&vt.info("Monorepo detected, updating install command to include workspace flag");for(let t of $e)if(await o(t.lockfile))return e&&t.monorepoSuffix?`${t.value} ${t.monorepoSuffix}`:t.value;return null},select:async()=>{let e=await I(),t=await kt({initialValue:"pnpm",message:"Which package manager do you use?",options:$e.map(s=>({label:s.label,value:e?`${s.value} ${s.monorepoSuffix}`:s.value}))});return typeof t!="string"?null:t}}});var We={};l(We,{title:()=>te});var te,se=i(()=>{"use strict";te=`
10
+ ${Pe}`)}}});var Oe={};l(Oe,{lint:()=>X});import{execSync as bt}from"child_process";import Dt from"process";var X,Q=i(()=>{"use strict";X=e=>{try{let t=e.length>0?e.join(" "):"./";bt(`npx @biomejs/biome check ${t}`,{stdio:"inherit"})}catch(t){let s=t instanceof Error?t.message:"Unknown error";console.error("Failed to run Ultracite:",s),Dt.exit(1)}}});var Te={};l(Te,{packageManager:()=>O});import{log as vt,select as kt}from"@clack/prompts";var $e,O,ee=i(()=>{"use strict";u();$e=[{hint:"Recommended",label:"pnpm",value:"pnpm add",lockfile:"pnpm-lock.yaml",monorepoSuffix:"-w"},{label:"bun",value:"bun add",lockfile:"bun.lockb",monorepoSuffix:""},{label:"yarn",value:"yarn add",lockfile:"yarn.lock",monorepoSuffix:""},{label:"npm",value:"npm install",lockfile:"package-lock.json",monorepoSuffix:"--workspace ."}],O={get:async()=>{let e=await I();e&&vt.info("Monorepo detected, updating install command to include workspace flag");for(let t of $e)if(await o(t.lockfile))return e&&t.monorepoSuffix?`${t.value} ${t.monorepoSuffix}`:t.value;return null},select:async()=>{let e=await I(),t=await kt({initialValue:"pnpm",message:"Which package manager do you use?",options:$e.map(s=>({label:s.label,value:e&&s.monorepoSuffix?`${s.value} ${s.monorepoSuffix}`:s.value}))});return typeof t!="string"?null:t}}});var Je={};l(Je,{title:()=>te});var te,se=i(()=>{"use strict";te=`
11
11
  888 888 888 88888888888 8888888b. d8888 .d8888b. 8888888 88888888888 8888888888
12
12
  888 888 888 888 888 Y88b d88888 d88P Y88b 888 888 888
13
13
  888 888 888 888 888 888 d88P888 888 888 888 888 888
@@ -16,12 +16,12 @@ ${Pe}`)}}});var Oe={};l(Oe,{lint:()=>X});import{execSync as bt}from"child_proces
16
16
  888 888 888 888 888 T88b d88P 888 888 888 888 888 888
17
17
  Y88b. .d88P 888 888 888 T88b d8888888888 Y88b d88P 888 888 888
18
18
  "Y88888P" 88888888 888 888 T88b d88P 888 "Y8888P" 8888888 888 8888888888
19
- `});var Ee={};l(Ee,{tsconfig:()=>C});import{readFile as Ct,writeFile as Je}from"fs/promises";import jt from"deepmerge";import{parse as St}from"jsonc-parser";var ze,$,C,ne=i(()=>{"use strict";u();ze={compilerOptions:{strictNullChecks:!0}},$="./tsconfig.json",C={exists:()=>o($),create:()=>Je($,JSON.stringify(ze,null,2)),update:async()=>{let e=await Ct($,"utf-8"),s=St(e)||{},n=jt(s,ze);await Je($,JSON.stringify(n,null,2))}}});var Le={};l(Le,{vscodeCopilot:()=>j});import{mkdir as qe,writeFile as He}from"fs/promises";var oe,j,ae=i(()=>{"use strict";f();u();oe="./.github/copilot-instructions.md",j={exists:()=>o(oe),create:async()=>{await qe(".github",{recursive:!0}),await He(oe,r)},update:async()=>{await qe(".github",{recursive:!0}),await He(oe,r)}}});var _e={};l(_e,{vscode:()=>S});import{mkdir as Ut,readFile as At,writeFile as Ge}from"fs/promises";import Mt from"deepmerge";import{parse as Ft}from"jsonc-parser";var Ye,T,S,ie=i(()=>{"use strict";u();Ye={"editor.defaultFormatter":"esbenp.prettier-vscode","[javascript][typescript][javascriptreact][typescriptreact][json][jsonc][css][graphql]":{"editor.defaultFormatter":"biomejs.biome"},"typescript.tsdk":"node_modules/typescript/lib","editor.formatOnSave":!0,"editor.formatOnPaste":!0,"emmet.showExpandedAbbreviation":"never","editor.codeActionsOnSave":{"source.fixAll.biome":"explicit","source.organizeImports.biome":"explicit"}},T="./.vscode/settings.json",S={exists:()=>o(T),create:async()=>{await Ut(".vscode",{recursive:!0}),await Ge(T,JSON.stringify(Ye,null,2))},update:async()=>{let e=await At(T,"utf-8"),s=Ft(e)||{},n=Mt(s,Ye);await Ge(T,JSON.stringify(n,null,2))}}});var Be={};l(Be,{windsurf:()=>U});import{mkdir as Ke,writeFile as Ze}from"fs/promises";var re,U,ce=i(()=>{"use strict";f();u();re="./.windsurf/rules/ultracite.md",U={exists:()=>o(re),create:async()=>{await Ke(".windsurf/rules",{recursive:!0}),await Ze(re,r)},update:async()=>{await Ke(".windsurf/rules",{recursive:!0}),await Ze(re,r)}}});var Ve={};l(Ve,{zed:()=>A});import{readFile as Rt,writeFile as le}from"fs/promises";var w,A,ue=i(()=>{"use strict";f();u();w="./.rules",A={exists:()=>o(w),create:async()=>{await le(w,r)},update:async()=>{if(!await o(w)){await le(w,r);return}let e=await Rt(w,"utf-8");e.includes(r.trim())||await le(w,`${e}
19
+ `});var Ee={};l(Ee,{tsconfig:()=>C});import{readFile as Ct,writeFile as We}from"fs/promises";import jt from"deepmerge";import{parse as St}from"jsonc-parser";var ze,$,C,ne=i(()=>{"use strict";u();ze={compilerOptions:{strictNullChecks:!0}},$="./tsconfig.json",C={exists:()=>o($),create:()=>We($,JSON.stringify(ze,null,2)),update:async()=>{let e=await Ct($,"utf-8"),s=St(e)||{},n=jt(s,ze);await We($,JSON.stringify(n,null,2))}}});var Le={};l(Le,{vscodeCopilot:()=>j});import{mkdir as qe,writeFile as He}from"fs/promises";var oe,j,ae=i(()=>{"use strict";f();u();oe="./.github/copilot-instructions.md",j={exists:()=>o(oe),create:async()=>{await qe(".github",{recursive:!0}),await He(oe,r)},update:async()=>{await qe(".github",{recursive:!0}),await He(oe,r)}}});var _e={};l(_e,{vscode:()=>S});import{mkdir as Ut,readFile as At,writeFile as Ge}from"fs/promises";import Mt from"deepmerge";import{parse as Ft}from"jsonc-parser";var Ye,T,S,ie=i(()=>{"use strict";u();Ye={"editor.defaultFormatter":"esbenp.prettier-vscode","[javascript][typescript][javascriptreact][typescriptreact][json][jsonc][css][graphql]":{"editor.defaultFormatter":"biomejs.biome"},"typescript.tsdk":"node_modules/typescript/lib","editor.formatOnSave":!0,"editor.formatOnPaste":!0,"emmet.showExpandedAbbreviation":"never","editor.codeActionsOnSave":{"source.fixAll.biome":"explicit","source.organizeImports.biome":"explicit"}},T="./.vscode/settings.json",S={exists:()=>o(T),create:async()=>{await Ut(".vscode",{recursive:!0}),await Ge(T,JSON.stringify(Ye,null,2))},update:async()=>{let e=await At(T,"utf-8"),s=Ft(e)||{},n=Mt(s,Ye);await Ge(T,JSON.stringify(n,null,2))}}});var Be={};l(Be,{windsurf:()=>U});import{mkdir as Ke,writeFile as Ze}from"fs/promises";var re,U,ce=i(()=>{"use strict";f();u();re="./.windsurf/rules/ultracite.md",U={exists:()=>o(re),create:async()=>{await Ke(".windsurf/rules",{recursive:!0}),await Ze(re,r)},update:async()=>{await Ke(".windsurf/rules",{recursive:!0}),await Ze(re,r)}}});var Ve={};l(Ve,{zed:()=>A});import{readFile as Rt,writeFile as le}from"fs/promises";var w,A,ue=i(()=>{"use strict";f();u();w="./.rules",A={exists:()=>o(w),create:async()=>{await le(w,r)},update:async()=>{if(!await o(w)){await le(w,r);return}let e=await Rt(w,"utf-8");e.includes(r.trim())||await le(w,`${e}
20
20
 
21
- ${r}`)}}});var Pt,de=i(()=>{Pt=we({"./biome.ts":()=>(L(),c(ke)),"./claude.ts":()=>(Y(),c(Se)),"./codex.ts":()=>(K(),c(Ae)),"./cursor.ts":()=>(B(),c(Re)),"./format.ts":()=>(H(),c(xe)),"./husky.ts":()=>(V(),c(Ne)),"./index.ts":()=>(et(),c(It)),"./initialize.ts":()=>(me(),c(Qe)),"./lint-staged.ts":()=>(pe(),c(Xe)),"./lint.ts":()=>(Q(),c(Oe)),"./package-manager.ts":()=>(ee(),c(Te)),"./title.ts":()=>(se(),c(We)),"./tsconfig.ts":()=>(ne(),c(Ee)),"./utils.ts":()=>(u(),c(be)),"./vscode-copilot.ts":()=>(ae(),c(Le)),"./vscode-settings.ts":()=>(ie(),c(_e)),"./windsurf.ts":()=>(ce(),c(Be)),"./zed.ts":()=>(ue(),c(Ve))})});var Xe={};l(Xe,{lintStaged:()=>x});import{execSync as Nt}from"child_process";import{readFile as W,writeFile as g}from"fs/promises";import{pathToFileURL as Ot}from"url";import M from"deepmerge";import{parse as ge}from"jsonc-parser";var m,tt,$t,Tt,Wt,Jt,zt,Et,qt,Ht,Lt,fe,Gt,x,pe=i(()=>{"use strict";u();de();m={"*.{js,jsx,ts,tsx,json,jsonc,css,scss,md,mdx}":["npx ultracite format"]},tt=["./package.json","./.lintstagedrc.json","./.lintstagedrc.js","./.lintstagedrc.cjs","./.lintstagedrc.mjs","./lint-staged.config.js","./lint-staged.config.cjs","./lint-staged.config.mjs","./.lintstagedrc.yaml","./.lintstagedrc.yml","./.lintstagedrc"],$t=(e,t,s,n)=>{let a=e.trim();if(a.includes(":")&&!a.startsWith("-")){s&&n.length>0&&(t[s]=n);let[d,...R]=a.split(":"),h=R.join(":").trim(),J=d.trim().replace(/['"]/g,"");return h&&h!==""?(h.startsWith("[")&&h.endsWith("]")?t[J]=h.slice(1,-1).split(",").map(nt=>nt.trim().replace(/['"]/g,"")):t[J]=h.replace(/['"]/g,""),{newCurrentKey:null,newCurrentArray:[]}):{newCurrentKey:J,newCurrentArray:[]}}if(a.startsWith("-")&&s){let d=[...n,a.slice(1).trim().replace(/['"]/g,"")];return{newCurrentKey:s,newCurrentArray:d}}return{newCurrentKey:s,newCurrentArray:n}},Tt=e=>{let t=e.split(`
22
- `).filter(d=>d.trim()&&!d.trim().startsWith("#")),s={},n=null,a=[];for(let d of t){let R=$t(d,s,n,a);n=R.newCurrentKey,a=R.newCurrentArray}return n&&a.length>0&&(s[n]=a),s},Wt=e=>{let t="";for(let[s,n]of Object.entries(e))if(Array.isArray(n)){t+=`${s}:
21
+ ${r}`)}}});var Pt,de=i(()=>{Pt=we({"./biome.ts":()=>(L(),c(ke)),"./claude.ts":()=>(Y(),c(Se)),"./codex.ts":()=>(K(),c(Ae)),"./cursor.ts":()=>(B(),c(Re)),"./format.ts":()=>(H(),c(xe)),"./husky.ts":()=>(V(),c(Ne)),"./index.ts":()=>(et(),c(It)),"./initialize.ts":()=>(me(),c(Qe)),"./lint-staged.ts":()=>(pe(),c(Xe)),"./lint.ts":()=>(Q(),c(Oe)),"./package-manager.ts":()=>(ee(),c(Te)),"./title.ts":()=>(se(),c(Je)),"./tsconfig.ts":()=>(ne(),c(Ee)),"./utils.ts":()=>(u(),c(be)),"./vscode-copilot.ts":()=>(ae(),c(Le)),"./vscode-settings.ts":()=>(ie(),c(_e)),"./windsurf.ts":()=>(ce(),c(Be)),"./zed.ts":()=>(ue(),c(Ve))})});var Xe={};l(Xe,{lintStaged:()=>x});import{execSync as Nt}from"child_process";import{readFile as J,writeFile as g}from"fs/promises";import{pathToFileURL as Ot}from"url";import M from"deepmerge";import{parse as ge}from"jsonc-parser";var m,tt,$t,Tt,Jt,Wt,zt,Et,qt,Ht,Lt,fe,Gt,x,pe=i(()=>{"use strict";u();de();m={"*.{js,jsx,ts,tsx,json,jsonc,css,scss,md,mdx}":["npx ultracite format"]},tt=["./package.json","./.lintstagedrc.json","./.lintstagedrc.js","./.lintstagedrc.cjs","./.lintstagedrc.mjs","./lint-staged.config.js","./lint-staged.config.cjs","./lint-staged.config.mjs","./.lintstagedrc.yaml","./.lintstagedrc.yml","./.lintstagedrc"],$t=(e,t,s,n)=>{let a=e.trim();if(a.includes(":")&&!a.startsWith("-")){s&&n.length>0&&(t[s]=n);let[d,...R]=a.split(":"),h=R.join(":").trim(),W=d.trim().replace(/['"]/g,"");return h&&h!==""?(h.startsWith("[")&&h.endsWith("]")?t[W]=h.slice(1,-1).split(",").map(nt=>nt.trim().replace(/['"]/g,"")):t[W]=h.replace(/['"]/g,""),{newCurrentKey:null,newCurrentArray:[]}):{newCurrentKey:W,newCurrentArray:[]}}if(a.startsWith("-")&&s){let d=[...n,a.slice(1).trim().replace(/['"]/g,"")];return{newCurrentKey:s,newCurrentArray:d}}return{newCurrentKey:s,newCurrentArray:n}},Tt=e=>{let t=e.split(`
22
+ `).filter(d=>d.trim()&&!d.trim().startsWith("#")),s={},n=null,a=[];for(let d of t){let R=$t(d,s,n,a);n=R.newCurrentKey,a=R.newCurrentArray}return n&&a.length>0&&(s[n]=a),s},Jt=e=>{let t="";for(let[s,n]of Object.entries(e))if(Array.isArray(n)){t+=`${s}:
23
23
  `;for(let a of n)t+=` - '${a}'
24
24
  `}else t+=`${s}: '${n}'
25
- `;return t},Jt=async()=>{try{let e=ge(await W("./package.json","utf-8"));return e?e.type==="module":!1}catch{return!1}},zt=async()=>{let e=ge(await W("./package.json","utf-8"));e&&(e["lint-staged"]?e["lint-staged"]=M(e["lint-staged"],m):e["lint-staged"]=m,await g("./package.json",JSON.stringify(e,null,2)))},Et=async e=>{let t=await W(e,"utf-8"),s=ge(t);if(!s)return;let n=M(s,m);await g(e,JSON.stringify(n,null,2))},qt=async e=>{let t=await W(e,"utf-8"),s=Tt(t);if(!s)return;let n=M(s,m);await g(e,Wt(n))},Ht=async e=>{let n=(await import(Ot(e).href)).default||{},a=M(n,m),d=`export default ${JSON.stringify(a,null,2)};
25
+ `;return t},Wt=async()=>{try{let e=ge(await J("./package.json","utf-8"));return e?e.type==="module":!1}catch{return!1}},zt=async()=>{let e=ge(await J("./package.json","utf-8"));e&&(e["lint-staged"]?e["lint-staged"]=M(e["lint-staged"],m):e["lint-staged"]=m,await g("./package.json",JSON.stringify(e,null,2)))},Et=async e=>{let t=await J(e,"utf-8"),s=ge(t);if(!s)return;let n=M(s,m);await g(e,JSON.stringify(n,null,2))},qt=async e=>{let t=await J(e,"utf-8"),s=Tt(t);if(!s)return;let n=M(s,m);await g(e,Jt(n))},Ht=async e=>{let n=(await import(Ot(e).href)).default||{},a=M(n,m),d=`export default ${JSON.stringify(a,null,2)};
26
26
  `;await g(e,d)},Lt=async e=>{delete E.cache[E.resolve(`./${e}`)];let t=Pt(`./${e}`),s=M(t,m),n=`module.exports = ${JSON.stringify(s,null,2)};
27
- `;await g(e,n)},fe=async()=>{await g(".lintstagedrc.json",JSON.stringify(m,null,2))},Gt=async e=>{if(e==="./package.json"){await zt();return}if(e.endsWith(".json")||e==="./.lintstagedrc"){await Et(e);return}if(e.endsWith(".yaml")||e.endsWith(".yml")){await qt(e);return}let t=await Jt();if(e.endsWith(".mjs")||e.endsWith(".js")&&t){try{await Ht(e)}catch{await fe()}return}if(e.endsWith(".cjs")||e.endsWith(".js")&&!t)try{await Lt(e)}catch{await fe()}},x={exists:async()=>{for(let e of tt)if(await o(e))return!0;return!1},install:e=>{Nt(`${e} -D lint-staged`)},create:async()=>{await g(".lintstagedrc.json",JSON.stringify(m,null,2))},update:async()=>{let e=null;for(let t of tt)if(await o(t)){e=t;break}if(!e){await fe();return}await Gt(e)}}});var Qe={};l(Qe,{initialize:()=>ye});import{execSync as Yt}from"child_process";import _t from"process";import{intro as Kt,log as he,multiselect as st,spinner as p}from"@clack/prompts";var Zt,Bt,Vt,Xt,Qt,es,ts,ss,ns,os,as,is,ye,me=i(()=>{"use strict";L();Y();K();B();V();pe();ee();se();ne();ae();ie();ce();ue();Zt=e=>{let t=p();t.start("Installing dependencies..."),Yt(`${e} -D -E ultracite @biomejs/biome@2.0.5`),t.stop("Dependencies installed.")},Bt=async()=>{let e=p();if(e.start("Checking for tsconfig.json..."),await C.exists()){e.message("tsconfig.json found, updating..."),await C.update(),e.stop("tsconfig.json updated.");return}e.message("tsconfig.json not found, creating..."),await C.create(),e.stop("tsconfig.json created.")},Vt=async()=>{let e=p();if(e.start("Checking for .vscode/settings.json..."),await S.exists()){e.message("settings.json found, updating..."),await S.update(),e.stop("settings.json updated.");return}e.message("settings.json not found, creating..."),await S.create(),e.stop("settings.json created.")},Xt=async()=>{let e=p();if(e.start("Checking for biome.jsonc..."),await b.exists()){e.message("biome.jsonc found, updating..."),await b.update(),e.stop("biome.jsonc updated.");return}e.message("biome.jsonc not found, creating..."),await b.create(),e.stop("biome.jsonc created.")},Qt=async e=>{let t=p();if(t.start("Initializing pre-commit hooks..."),t.message("Installing Husky..."),y.install(e),await y.exists()){t.message("Pre-commit hook found, updating..."),await y.update(),t.stop("Pre-commit hook updated.");return}t.message("Updating pre-commit hook..."),t.message("Pre-commit hook not found, creating..."),await y.create(),t.stop("Pre-commit hook created.")},es=async e=>{let t=p();if(t.start("Initializing lint-staged..."),t.message("Installing lint-staged..."),x.install(e),await x.exists()){t.message("lint-staged found, updating..."),await x.update(),t.stop("lint-staged updated.");return}t.message("lint-staged not found, creating..."),await x.create(),t.stop("lint-staged created.")},ts=async()=>{let e=p();if(e.start("Checking for GitHub Copilot rules..."),await j.exists()){e.message("GitHub Copilot rules found, updating..."),await j.update(),e.stop("GitHub Copilot rules updated.");return}e.message("GitHub Copilot rules not found, creating..."),await j.create(),e.stop("GitHub Copilot rules created.")},ss=async()=>{let e=p();if(e.start("Checking for Cursor rules..."),await k.exists()){e.message("Cursor rules found, updating..."),await k.update(),e.stop("Cursor rules updated.");return}e.message("Cursor rules not found, creating..."),await k.create(),e.stop("Cursor rules created.")},ns=async()=>{let e=p();if(e.start("Checking for Windsurf rules..."),await U.exists()){e.message("Windsurf rules found, updating..."),await U.update(),e.stop("Windsurf rules updated.");return}e.message("Windsurf rules not found, creating..."),await U.create(),e.stop("Windsurf rules created.")},os=async()=>{let e=p();if(e.start("Checking for Zed rules..."),await A.exists()){e.message("Zed rules found, updating..."),await A.update(),e.stop("Zed rules updated.");return}e.message("Zed rules not found, creating..."),await A.create(),e.stop("Zed rules created.")},as=async()=>{let e=p();if(e.start("Checking for Claude Code rules..."),await D.exists()){e.message("Claude Code rules found, updating..."),await D.update(),e.stop("Claude Code rules updated.");return}e.message("Claude Code rules not found, creating..."),await D.create(),e.stop("Claude Code rules created.")},is=async()=>{let e=p();if(e.start("Checking for OpenAI Codex rules..."),await v.exists()){e.message("OpenAI Codex rules found, updating..."),await v.update(),e.stop("OpenAI Codex rules updated.");return}e.message("OpenAI Codex rules not found, creating..."),await v.create(),e.stop("OpenAI Codex rules created.")},ye=async()=>{Kt(te);try{let e=await O.get();if(e?he.info(`Detected lockfile, using ${e}`):e=await O.select(),!e||typeof e!="string")throw new Error("No package manager selected");let t=await st({message:"Which editor rules do you want to enable (optional)?",options:[{label:"GitHub Copilot (VSCode)",value:"vscode-copilot"},{label:"Cursor",value:"cursor"},{label:"Windsurf",value:"windsurf"},{label:"Zed",value:"zed"},{label:"Claude Code",value:"claude"},{label:"OpenAI Codex",value:"codex"}],required:!1}),s=await st({message:"Would you like any of the following (optional)?",options:[{label:"Pre-commit hook with Husky",value:"precommit-hooks"},{label:"Lint-staged",value:"lint-staged"}],required:!1});Zt(e),await Bt(),await Vt(),await Xt(),Array.isArray(t)&&(t.includes("vscode-copilot")&&await ts(),t.includes("cursor")&&await ss(),t.includes("windsurf")&&await ns(),t.includes("zed")&&await os(),t.includes("claude")&&await as(),t.includes("codex")&&await is()),Array.isArray(s)&&(s.includes("precommit-hooks")&&await Qt(e),s.includes("lint-staged")&&await es(e)),he.success("Successfully initialized Ultracite configuration!")}catch(e){let t=e instanceof Error?e.message:"Unknown error";he.error(`Failed to initialize Ultracite configuration: ${t}`),_t.exit(1)}}});var It={};import{Command as rs}from"commander";var F,et=i(()=>{H();me();Q();F=new rs;F.name("Ultracite").description("Ship code faster and with more confidence.");F.command("init").description("Initialize Ultracite in the current directory").action(ye);F.command("lint").description("Run Biome linter without fixing files").argument("[files...]","specific files to lint (optional)").action(X);F.command("format").description("Run Biome linter and fixes files").argument("[files...]","specific files to format (optional)").option("--unsafe","apply unsafe fixes").action(q);F.parse()});et();
27
+ `;await g(e,n)},fe=async()=>{await g(".lintstagedrc.json",JSON.stringify(m,null,2))},Gt=async e=>{if(e==="./package.json"){await zt();return}if(e.endsWith(".json")||e==="./.lintstagedrc"){await Et(e);return}if(e.endsWith(".yaml")||e.endsWith(".yml")){await qt(e);return}let t=await Wt();if(e.endsWith(".mjs")||e.endsWith(".js")&&t){try{await Ht(e)}catch{await fe()}return}if(e.endsWith(".cjs")||e.endsWith(".js")&&!t)try{await Lt(e)}catch{await fe()}},x={exists:async()=>{for(let e of tt)if(await o(e))return!0;return!1},install:e=>{Nt(`${e} -D lint-staged`)},create:async()=>{await g(".lintstagedrc.json",JSON.stringify(m,null,2))},update:async()=>{let e=null;for(let t of tt)if(await o(t)){e=t;break}if(!e){await fe();return}await Gt(e)}}});var Qe={};l(Qe,{initialize:()=>ye});import{execSync as Yt}from"child_process";import _t from"process";import{intro as Kt,log as he,multiselect as st,spinner as p}from"@clack/prompts";var Zt,Bt,Vt,Xt,Qt,es,ts,ss,ns,os,as,is,ye,me=i(()=>{"use strict";L();Y();K();B();V();pe();ee();se();ne();ae();ie();ce();ue();Zt=e=>{let t=p();t.start("Installing dependencies..."),Yt(`${e} -D -E ultracite @biomejs/biome@2.0.5`),t.stop("Dependencies installed.")},Bt=async()=>{let e=p();if(e.start("Checking for tsconfig.json..."),await C.exists()){e.message("tsconfig.json found, updating..."),await C.update(),e.stop("tsconfig.json updated.");return}e.message("tsconfig.json not found, creating..."),await C.create(),e.stop("tsconfig.json created.")},Vt=async()=>{let e=p();if(e.start("Checking for .vscode/settings.json..."),await S.exists()){e.message("settings.json found, updating..."),await S.update(),e.stop("settings.json updated.");return}e.message("settings.json not found, creating..."),await S.create(),e.stop("settings.json created.")},Xt=async()=>{let e=p();if(e.start("Checking for biome.jsonc..."),await b.exists()){e.message("biome.jsonc found, updating..."),await b.update(),e.stop("biome.jsonc updated.");return}e.message("biome.jsonc not found, creating..."),await b.create(),e.stop("biome.jsonc created.")},Qt=async e=>{let t=p();if(t.start("Initializing pre-commit hooks..."),t.message("Installing Husky..."),y.install(e),await y.exists()){t.message("Pre-commit hook found, updating..."),await y.update(),t.stop("Pre-commit hook updated.");return}t.message("Updating pre-commit hook..."),t.message("Pre-commit hook not found, creating..."),await y.create(),t.stop("Pre-commit hook created.")},es=async e=>{let t=p();if(t.start("Initializing lint-staged..."),t.message("Installing lint-staged..."),x.install(e),await x.exists()){t.message("lint-staged found, updating..."),await x.update(),t.stop("lint-staged updated.");return}t.message("lint-staged not found, creating..."),await x.create(),t.stop("lint-staged created.")},ts=async()=>{let e=p();if(e.start("Checking for GitHub Copilot rules..."),await j.exists()){e.message("GitHub Copilot rules found, updating..."),await j.update(),e.stop("GitHub Copilot rules updated.");return}e.message("GitHub Copilot rules not found, creating..."),await j.create(),e.stop("GitHub Copilot rules created.")},ss=async()=>{let e=p();if(e.start("Checking for Cursor rules..."),await k.exists()){e.message("Cursor rules found, updating..."),await k.update(),e.stop("Cursor rules updated.");return}e.message("Cursor rules not found, creating..."),await k.create(),e.stop("Cursor rules created.")},ns=async()=>{let e=p();if(e.start("Checking for Windsurf rules..."),await U.exists()){e.message("Windsurf rules found, updating..."),await U.update(),e.stop("Windsurf rules updated.");return}e.message("Windsurf rules not found, creating..."),await U.create(),e.stop("Windsurf rules created.")},os=async()=>{let e=p();if(e.start("Checking for Zed rules..."),await A.exists()){e.message("Zed rules found, updating..."),await A.update(),e.stop("Zed rules updated.");return}e.message("Zed rules not found, creating..."),await A.create(),e.stop("Zed rules created.")},as=async()=>{let e=p();if(e.start("Checking for Claude Code rules..."),await D.exists()){e.message("Claude Code rules found, updating..."),await D.update(),e.stop("Claude Code rules updated.");return}e.message("Claude Code rules not found, creating..."),await D.create(),e.stop("Claude Code rules created.")},is=async()=>{let e=p();if(e.start("Checking for OpenAI Codex rules..."),await v.exists()){e.message("OpenAI Codex rules found, updating..."),await v.update(),e.stop("OpenAI Codex rules updated.");return}e.message("OpenAI Codex rules not found, creating..."),await v.create(),e.stop("OpenAI Codex rules created.")},ye=async()=>{Kt(te);try{let e=await O.get();if(e?he.info(`Detected lockfile, using ${e}`):e=await O.select(),!e||typeof e!="string")throw new Error("No package manager selected");let t=await st({message:"Which editor rules do you want to enable (optional)?",options:[{label:"GitHub Copilot (VSCode)",value:"vscode-copilot"},{label:"Cursor",value:"cursor"},{label:"Windsurf",value:"windsurf"},{label:"Zed",value:"zed"},{label:"Claude Code",value:"claude"},{label:"OpenAI Codex",value:"codex"}],required:!1}),s=await st({message:"Would you like any of the following (optional)?",options:[{label:"Pre-commit hook with Husky",value:"precommit-hooks"},{label:"Lint-staged",value:"lint-staged"}],required:!1});Zt(e),await Bt(),await Vt(),await Xt(),Array.isArray(t)&&(t.includes("vscode-copilot")&&await ts(),t.includes("cursor")&&await ss(),t.includes("windsurf")&&await ns(),t.includes("zed")&&await os(),t.includes("claude")&&await as(),t.includes("codex")&&await is()),Array.isArray(s)&&(s.includes("precommit-hooks")&&await Qt(e),s.includes("lint-staged")&&await es(e)),he.success("Successfully initialized Ultracite configuration!")}catch(e){let t=e instanceof Error?e.message:"Unknown error";he.error(`Failed to initialize Ultracite configuration: ${t}`),_t.exit(1)}}});var It={};import{Command as rs}from"commander";var F,et=i(()=>{H();me();Q();F=new rs;F.name("Ultracite").description("Ship code faster and with more confidence.");F.command("init").description("Initialize Ultracite in the current directory").action(ye);F.command("lint").description("Run Biome linter without fixing files").argument("[files...]","specific files to lint (optional)").action(X);F.command("format").description("Run Biome linter and fixes files").argument("[files...]","specific files to format (optional)").option("--unsafe","apply unsafe fixes").action(q);F.parse()});et();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ultracite",
3
3
  "description": "The AI-ready formatter that helps you write and generate code faster.",
4
- "version": "5.0.20",
4
+ "version": "5.0.21",
5
5
  "bin": {
6
6
  "ultracite": "dist/index.js"
7
7
  },